const translations = { de: { // ── Navigation / Header ────────────────────────────────────────────────── 'nav.logged_in': 'Angemeldet', 'nav.assessments': 'Bewertungen', 'nav.analysis': 'Analyse', 'nav.profile': 'Profil', 'nav.sign_out': 'Abmelden', 'nav.theme_dark': 'Dark Mode', 'nav.theme_light': 'Light Mode', 'nav.analysis_disabled': 'Analyse ist während der Bearbeitung deaktiviert', 'nav.analysis_open': 'Analyse öffnen', 'nav.profile_disabled': 'Profil ist während der Bearbeitung deaktiviert', 'nav.profile_open': 'Profil öffnen', // ── Profil ─────────────────────────────────────────────────────────────── 'profile.title_label': 'Benutzerprofil', 'profile.title': 'Profil verwalten', 'profile.description': 'Name, Vorname, Mailadresse, Land und die Sichtbarkeit deiner Testfreigaben werden hier gepflegt.', 'profile.loading': 'Profil wird geladen...', 'profile.first_name': 'Vorname', 'profile.first_name_placeholder': 'Max', 'profile.last_name': 'Nachname', 'profile.last_name_placeholder': 'Mustermann', 'profile.email': 'Mailadresse', 'profile.email_hint': 'Wenn du die Mailadresse änderst, wird dir eine Bestätigung an die neue Adresse gesendet.', 'profile.country': 'Land', 'profile.country_none': 'Kein Land ausgewählt', 'profile.country_hint': 'Dein Land', 'profile.display': 'Anzeige', 'profile.display_hint': 'Sprache, in der die Anwendung angezeigt wird.', 'profile.rank': 'Rang Anzeige', 'profile.rank_placeholder': 'Platzhalter', 'profile.rank_hint': 'Hier kann später der Ranglistenplatz des Benutzers angezeigt werden.', 'profile.tests_visible_title': 'Tests sichtbar', 'profile.tests_visible_desc': 'Ist dieser Schalter aktiv, funktionieren deine Freigabelinks. Wenn du ihn deaktivierst, bleiben vorhandene Links gespeichert, sind aber nicht mehr öffentlich sichtbar.', 'profile.visible': 'Sichtbar', 'profile.not_visible': 'Nicht sichtbar', 'profile.account_id': 'Konto-ID', 'profile.delete': 'Profil löschen', 'profile.deleting': 'Löscht...', 'profile.save': 'Profil speichern', 'profile.saving': 'Speichert...', 'profile.saved': 'Profil gespeichert.', 'profile.saved_email': 'Profil gespeichert. Die neue Mailadresse muss ggf. noch per E-Mail bestätigt werden.', 'profile.error_save': 'Profil konnte nicht gespeichert werden.', 'profile.error_delete': 'Profil konnte nicht gelöscht werden.', 'profile.delete_confirm': 'Profil wirklich löschen?\n\nDabei werden alle Tests dieses Benutzers sowie vorhandene Analysepläne dauerhaft entfernt.', 'profile.deleted': 'Profil und alle Tests wurden gelöscht. Das Konto bleibt bestehen und kann neu eingerichtet werden.', // ── PAT Test Manager (Toast-Meldungen) ─────────────────────────────────── 'patmgr.saved': 'Erfolgreich gespeichert!', 'patmgr.finalized': 'Bewertung wurde final abgeschlossen und ist jetzt nur noch lesbar.', 'patmgr.fill_name_date': 'Bitte Name und Datum ausfüllen bevor Sie speichern', 'patmgr.share_copied': 'Freigabelink für "{label}" wurde in die Zwischenablage kopiert.', 'patmgr.share_localhost_hint': 'Hinweis: Der Link zeigt aktuell auf localhost und ist nur erreichbar, wenn die App von außen erreichbar ist.', 'patmgr.share_link_label': 'Freigabelink für "{label}"', 'patmgr.share_error': 'Freigabelink konnte nicht erstellt werden: {error}', 'patmgr.unshare_success': 'Freigabe für "{label}" wurde aufgehoben.', 'patmgr.unshare_error': 'Freigabe konnte nicht aufgehoben werden: {error}', 'patmgr.profile_loading': 'Profil wird noch geladen. Bitte versuche es gleich noch einmal.', 'patmgr.enable_visible': 'Aktiviere im Profil zuerst "Tests sichtbar", bevor du Tests teilst.', 'patmgr.save_before_share': 'Bitte den Test zuerst speichern, bevor du ihn teilen kannst.', 'patmgr.save_for_share': 'Bitte erst speichern, damit der aktuelle Stand geteilt wird.', 'patmgr.save_first': 'Bitte zuerst speichern', 'patmgr.profile_loading_btn': 'Profil wird geladen', 'patmgr.enable_visible_btn': 'Aktiviere im Profil "Tests sichtbar"', // ── PAT Liste ──────────────────────────────────────────────────────────── 'patlist.title': 'PAT Test Manager', 'patlist.new_assessment': 'Neue Bewertung', 'patlist.filter_name': 'Nach Name filtern', 'patlist.filter_date': 'Nach Datum filtern', 'patlist.col_name': 'Name', 'patlist.col_date': 'Datum', 'patlist.col_result': 'Ergebnis', 'patlist.date_placeholder': 'tt.mm.jjjj', 'patlist.prev_month': 'Vorheriger Monat', 'patlist.next_month': 'Nächster Monat', 'patlist.today': 'Heute', 'patlist.delete': 'Löschen', 'patlist.open_assessments': 'Noch offene Bewertungen', 'patlist.no_open': 'Keine offenen Bewertungen mit den aktuellen Suchfiltern gefunden', 'patlist.closed_assessments': 'Abgeschlossene Bewertungen', 'patlist.no_closed': 'Keine abgeschlossenen Bewertungen mit den aktuellen Suchfiltern gefunden', 'patlist.no_assessments': 'Noch keine Bewertungen vorhanden', 'patlist.no_assessments_hint': 'Lege oben eine neue Bewertung an und wähle dabei PAT Start, PAT 1, PAT 2 oder PAT 3', 'patlist.share_active': 'Freigabe aktiv', 'patlist.share_paused': 'Freigabe pausiert', 'patlist.finalized': 'Final abgeschlossen', 'patlist.open': 'Öffnen', 'patlist.count': 'Anzahl: {count}', 'patlist.days': 'Mo Di Mi Do Fr Sa So', // ── PAT Detail ─────────────────────────────────────────────────────────── 'detail.back': '← Zurück zur Übersicht', 'detail.unsaved': '● Ungespeicherte Änderungen', 'detail.finalized': 'Final abgeschlossen', 'detail.share_active': 'Freigabe aktiv', 'detail.share_paused': 'Freigabe pausiert', 'detail.save': 'Speichern', 'detail.finalize': 'Final Abschließen', 'detail.pdf': 'PDF', 'detail.share': 'Teilen', 'detail.unshare': 'Freigabe aufheben', 'detail.readonly': 'Nur Lese-Modus', 'detail.readonly_hint': 'Diese Bewertung wurde final abgeschlossen und kann nicht mehr bearbeitet werden.', 'detail.date_name': 'Datum / Name', 'detail.name_placeholder': 'Name', 'detail.col_avg_target': 'Durchschnitt Soll {soll}', 'detail.col_actual': 'Ist', 'detail.col_factor': 'Faktor', 'detail.col_points': 'Points', 'detail.col_result': 'Ergebnis', // ── Speichern-Dialog ───────────────────────────────────────────────────── 'savedialog.title': 'Ungespeicherte Änderungen', 'savedialog.message': 'Sie haben ungespeicherte Änderungen. Möchten Sie diese speichern?', 'savedialog.yes': 'Ja, speichern', 'savedialog.no': 'Nein, verwerfen', 'savedialog.cancel': 'Abbrechen', // ── Analyse ────────────────────────────────────────────────────────────── 'analysis.title': 'Analyse', 'analysis.priority_title': 'Wo solltest du besser werden?', 'analysis.priority_desc': 'Priorisierung nach Gap × Faktor × Konstanz basierend auf den letzten 5 Assessments.', 'analysis.assessments_count': 'Assessments: {count}', 'analysis.window': 'Analysefenster: {count}/5', 'analysis.limited_data': 'Begrenzte Datenbasis', 'analysis.no_data': 'Noch keine Daten für die Analyse', 'analysis.no_data_hint': 'Lege zuerst eine Bewertung im Bereich "Bewertungen" an.', 'analysis.no_type_data': 'Keine Bewertungen für {patType}', 'analysis.no_type_hint': 'Wähle einen anderen PAT-Typ oder erstelle eine neue Bewertung.', // ── Schwächen ──────────────────────────────────────────────────────────── 'weakness.no_data': 'Keine Schwächen-Daten verfügbar.', 'weakness.title': 'Top-3 Schwächen', 'weakness.gap': 'Gap: {score}', 'weakness.consistency': 'Konstanz: {score}', 'weakness.trend': 'Trend: {score}', // ── Stärken ────────────────────────────────────────────────────────────── 'strength.no_data': 'Keine Stärken-Daten verfügbar.', 'strength.title': 'Top-3 Stärken', 'strength.actual': 'Ist: {score}', 'strength.target': 'Soll: {score}', 'strength.trend': 'Trend: {score}', // ── Trainingsplan ──────────────────────────────────────────────────────── 'training.title': 'Trainingsplan ({patType})', 'training.hint': '1 aktiver Plan + Historie, Session-Status: offen / erledigt / übersprungen.', 'training.reload': 'Neu laden', 'training.duration': 'Dauer', 'training.2weeks': '2 Wochen', 'training.4weeks': '4 Wochen', 'training.6weeks': '6 Wochen', 'training.sessions_per_week': 'Einheiten/Woche', 'training.generate': 'Plan (neu) generieren', 'training.save_draft': 'Entwurf speichern', 'training.saving': 'Speichert…', 'training.draft_created': 'Neuer Entwurf erstellt. Du kannst jetzt Intensität und Übungen je Session anpassen.', 'training.create_draft_first': 'Erstelle zuerst einen Entwurf.', 'training.save_error': 'Trainingsplan konnte nicht gespeichert werden.', 'training.save_success': 'Trainingsplan gespeichert. Der vorherige aktive Plan wurde archiviert.', 'training.week_session': 'Woche {weekNo} · Einheit {sessionNo}', 'training.main_exercise': 'Hauptübung', 'training.side_exercises': 'Nebenübungen, getrennt mit Komma', 'training.high': 'hoch', 'training.medium': 'mittel', 'training.easy': 'leicht', 'training.draft_label': 'Entwurf (teilweise editierbar)', 'training.sessions_info': 'Sessions: {count} · hoch {high} · mittel {medium} · leicht {easy}', 'training.active_plan': 'Aktiver Plan', 'training.loading': 'Lädt…', 'training.no_active': 'Noch kein aktiver Trainingsplan vorhanden.', 'training.generated': 'Generiert: {date} · {weeks} Wochen · {sessions} Einheiten/Woche', 'training.week_short': 'W{weekNo} · E{sessionNo}', 'training.status_open': 'offen', 'training.status_done': 'erledigt', 'training.status_skipped': 'übersprungen', 'training.note': 'Notiz', 'training.history': 'Plan-Historie', 'training.no_history': 'Keine archivierten Pläne vorhanden.', // ── Gap-Chart ──────────────────────────────────────────────────────────── 'gapchart.no_data': 'Kein Gap-Chart verfügbar.', 'gapchart.title': 'Gap-Bar-Chart (Priorität)', 'gapchart.aria': 'Gap-Balkendiagramm', // ── Live Übersicht ─────────────────────────────────────────────────────── 'live.title': 'Live Übersicht', 'live.stats_title': 'Aktuelle Statistik', 'live.basis': 'Basis: alle Bewertungen, geladen beim Seitenaufruf', 'live.loading': 'Lädt…', 'live.timestamp': 'Stand: jetzt', 'live.no_data': 'Noch keine Bewertungen vorhanden. Lege eine neue Bewertung an, um hier Live-Werte zu sehen.', 'live.count': 'Bewertungen', 'live.count_desc': 'In der PAT Datenbank hinterlegt', 'live.avg_points': 'Ø Gesamtpunkte', 'live.avg_desc': 'Durchschnitt aller Assessments', 'live.last': 'Letzte Bewertung', 'live.unnamed': 'Unbenannt', 'live.top': 'Top Ergebnis', // ── Geteilte Bewertung ─────────────────────────────────────────────────── 'shared.missing_token': 'Freigabelink fehlt.', 'shared.invalid': 'Dieser Freigabelink ist ungültig, deaktiviert oder aktuell nicht öffentlich sichtbar.', 'shared.load_error': 'Geteilter Test konnte nicht geladen werden.', 'shared.loading': 'Geteilter Test wird geladen...', 'shared.label': 'Freigabe', 'shared.not_available': 'Geteilter Test nicht verfügbar', 'shared.title': 'Geteilter Test', 'shared.default_name': 'PAT Test', 'shared.hint': 'Dieser Link zeigt nur diesen einen Test im Nur-Lesen-Modus.', 'shared.date': 'Datum', 'shared.total_points': 'Gesamtpunkte', 'shared.rating': 'Bewertung', 'shared.target_factor': 'Soll {soll} · Faktor {faktor}', 'shared.col_points': 'Points', 'shared.col_values': 'Werte', 'shared.col_avg': 'Durchschnitt', 'shared.col_target': 'Soll', 'shared.col_factor': 'Faktor', 'shared.col_result': 'Ergebnis', // ── Anmeldung ──────────────────────────────────────────────────────────── 'auth.title': 'PAT Stats', 'auth.subtitle': 'Anmelden oder registrieren', 'auth.description': 'Melde dich mit deinem PAT-Test Konto an, um deine Bewertungen sicher zu verwalten.', 'auth.login_tab': 'Login', 'auth.register_tab': 'Registrieren', 'auth.email': 'E-Mail', 'auth.password': 'Passwort', 'auth.login_success': 'Erfolgreich angemeldet', 'auth.register_success': 'Registrierung abgeschlossen. Prüfe dein Postfach zur Bestätigung.', 'auth.sending': 'Wird gesendet...', 'auth.login_btn': 'Einloggen', 'auth.register_btn': 'Konto erstellen', 'auth.back': 'Zurück', }, en: { 'nav.logged_in': 'Signed in', 'nav.assessments': 'Assessments', 'nav.analysis': 'Analysis', 'nav.profile': 'Profile', 'nav.sign_out': 'Sign out', 'nav.theme_dark': 'Dark Mode', 'nav.theme_light': 'Light Mode', 'nav.analysis_disabled': 'Analysis is disabled while editing', 'nav.analysis_open': 'Open analysis', 'nav.profile_disabled': 'Profile is disabled while editing', 'nav.profile_open': 'Open profile', 'profile.title_label': 'User Profile', 'profile.title': 'Manage Profile', 'profile.description': 'Manage your first name, last name, email address, country and the visibility of your shared tests here.', 'profile.loading': 'Loading profile...', 'profile.first_name': 'First name', 'profile.first_name_placeholder': 'John', 'profile.last_name': 'Last name', 'profile.last_name_placeholder': 'Doe', 'profile.email': 'Email address', 'profile.email_hint': 'If you change your email address, a confirmation will be sent to the new address.', 'profile.country': 'Country', 'profile.country_none': 'No country selected', 'profile.country_hint': 'Your country', 'profile.display': 'Display', 'profile.display_hint': 'Language in which the application is displayed.', 'profile.rank': 'Rank Display', 'profile.rank_placeholder': 'Placeholder', 'profile.rank_hint': 'The user\'s ranking position will be displayed here later.', 'profile.tests_visible_title': 'Tests visible', 'profile.tests_visible_desc': 'When this toggle is active, your share links work. If you deactivate it, existing links are saved but no longer publicly visible.', 'profile.visible': 'Visible', 'profile.not_visible': 'Not visible', 'profile.account_id': 'Account ID', 'profile.delete': 'Delete profile', 'profile.deleting': 'Deleting...', 'profile.save': 'Save profile', 'profile.saving': 'Saving...', 'profile.saved': 'Profile saved.', 'profile.saved_email': 'Profile saved. The new email address may still need to be confirmed via email.', 'profile.error_save': 'Profile could not be saved.', 'profile.error_delete': 'Profile could not be deleted.', 'profile.delete_confirm': 'Really delete profile?\n\nThis will permanently remove all tests for this user and any existing analysis plans.', 'profile.deleted': 'Profile and all tests have been deleted. The account remains and can be set up again.', 'patmgr.saved': 'Successfully saved!', 'patmgr.finalized': 'Assessment has been finalized and is now read-only.', 'patmgr.fill_name_date': 'Please fill in name and date before saving', 'patmgr.share_copied': 'Share link for "{label}" copied to clipboard.', 'patmgr.share_localhost_hint': 'Note: The link currently points to localhost and is only accessible if the app is reachable from outside.', 'patmgr.share_link_label': 'Share link for "{label}"', 'patmgr.share_error': 'Share link could not be created: {error}', 'patmgr.unshare_success': 'Share for "{label}" has been revoked.', 'patmgr.unshare_error': 'Share could not be revoked: {error}', 'patmgr.profile_loading': 'Profile is still loading. Please try again in a moment.', 'patmgr.enable_visible': 'Enable "Tests visible" in your profile before sharing tests.', 'patmgr.save_before_share': 'Please save the test first before sharing it.', 'patmgr.save_for_share': 'Please save first so the current state is shared.', 'patmgr.save_first': 'Please save first', 'patmgr.profile_loading_btn': 'Profile loading', 'patmgr.enable_visible_btn': 'Enable "Tests visible" in profile', 'patlist.title': 'PAT Test Manager', 'patlist.new_assessment': 'New Assessment', 'patlist.filter_name': 'Filter by name', 'patlist.filter_date': 'Filter by date', 'patlist.col_name': 'Name', 'patlist.col_date': 'Date', 'patlist.col_result': 'Result', 'patlist.date_placeholder': 'dd.mm.yyyy', 'patlist.prev_month': 'Previous month', 'patlist.next_month': 'Next month', 'patlist.today': 'Today', 'patlist.delete': 'Delete', 'patlist.open_assessments': 'Open assessments', 'patlist.no_open': 'No open assessments found with the current filters', 'patlist.closed_assessments': 'Finalized assessments', 'patlist.no_closed': 'No finalized assessments found with the current filters', 'patlist.no_assessments': 'No assessments yet', 'patlist.no_assessments_hint': 'Create a new assessment above and choose PAT Start, PAT 1, PAT 2 or PAT 3', 'patlist.share_active': 'Share active', 'patlist.share_paused': 'Share paused', 'patlist.finalized': 'Finalized', 'patlist.open': 'Open', 'patlist.count': 'Count: {count}', 'patlist.days': 'Mo Tu We Th Fr Sa Su', 'detail.back': '← Back to overview', 'detail.unsaved': '● Unsaved changes', 'detail.finalized': 'Finalized', 'detail.share_active': 'Share active', 'detail.share_paused': 'Share paused', 'detail.save': 'Save', 'detail.finalize': 'Finalize', 'detail.pdf': 'PDF', 'detail.share': 'Share', 'detail.unshare': 'Revoke share', 'detail.readonly': 'Read-only mode', 'detail.readonly_hint': 'This assessment has been finalized and can no longer be edited.', 'detail.date_name': 'Date / Name', 'detail.name_placeholder': 'Name', 'detail.col_avg_target': 'Avg. target {soll}', 'detail.col_actual': 'Actual', 'detail.col_factor': 'Factor', 'detail.col_points': 'Points', 'detail.col_result': 'Result', 'savedialog.title': 'Unsaved changes', 'savedialog.message': 'You have unsaved changes. Would you like to save them?', 'savedialog.yes': 'Yes, save', 'savedialog.no': 'No, discard', 'savedialog.cancel': 'Cancel', 'analysis.title': 'Analysis', 'analysis.priority_title': 'Where should you improve?', 'analysis.priority_desc': 'Prioritized by Gap × Factor × Consistency based on the last 5 assessments.', 'analysis.assessments_count': 'Assessments: {count}', 'analysis.window': 'Analysis window: {count}/5', 'analysis.limited_data': 'Limited data basis', 'analysis.no_data': 'No data for analysis yet', 'analysis.no_data_hint': 'Create an assessment in the "Assessments" section first.', 'analysis.no_type_data': 'No assessments for {patType}', 'analysis.no_type_hint': 'Choose a different PAT type or create a new assessment.', 'weakness.no_data': 'No weakness data available.', 'weakness.title': 'Top 3 Weaknesses', 'weakness.gap': 'Gap: {score}', 'weakness.consistency': 'Consistency: {score}', 'weakness.trend': 'Trend: {score}', 'strength.no_data': 'No strength data available.', 'strength.title': 'Top 3 Strengths', 'strength.actual': 'Actual: {score}', 'strength.target': 'Target: {score}', 'strength.trend': 'Trend: {score}', 'training.title': 'Training Plan ({patType})', 'training.hint': '1 active plan + history, session status: open / done / skipped.', 'training.reload': 'Reload', 'training.duration': 'Duration', 'training.2weeks': '2 weeks', 'training.4weeks': '4 weeks', 'training.6weeks': '6 weeks', 'training.sessions_per_week': 'Sessions/week', 'training.generate': 'Generate plan', 'training.save_draft': 'Save draft', 'training.saving': 'Saving…', 'training.draft_created': 'New draft created. You can now adjust intensity and exercises per session.', 'training.create_draft_first': 'Create a draft first.', 'training.save_error': 'Training plan could not be saved.', 'training.save_success': 'Training plan saved. The previous active plan has been archived.', 'training.week_session': 'Week {weekNo} · Session {sessionNo}', 'training.main_exercise': 'Main exercise', 'training.side_exercises': 'Side exercises, separated by comma', 'training.high': 'high', 'training.medium': 'medium', 'training.easy': 'easy', 'training.draft_label': 'Draft (partially editable)', 'training.sessions_info': 'Sessions: {count} · high {high} · medium {medium} · easy {easy}', 'training.active_plan': 'Active Plan', 'training.loading': 'Loading…', 'training.no_active': 'No active training plan yet.', 'training.generated': 'Generated: {date} · {weeks} weeks · {sessions} sessions/week', 'training.week_short': 'W{weekNo} · S{sessionNo}', 'training.status_open': 'open', 'training.status_done': 'done', 'training.status_skipped': 'skipped', 'training.note': 'Note', 'training.history': 'Plan history', 'training.no_history': 'No archived plans available.', 'gapchart.no_data': 'No gap chart available.', 'gapchart.title': 'Gap Bar Chart (Priority)', 'gapchart.aria': 'Gap bar chart', 'live.title': 'Live Overview', 'live.stats_title': 'Current Statistics', 'live.basis': 'Based on all assessments, loaded on page open', 'live.loading': 'Loading…', 'live.timestamp': 'As of: now', 'live.no_data': 'No assessments yet. Create a new assessment to see live values here.', 'live.count': 'Assessments', 'live.count_desc': 'Stored in the PAT database', 'live.avg_points': 'Avg. total points', 'live.avg_desc': 'Average of all assessments', 'live.last': 'Latest assessment', 'live.unnamed': 'Unnamed', 'live.top': 'Top result', 'shared.missing_token': 'Share link missing.', 'shared.invalid': 'This share link is invalid, disabled or currently not publicly visible.', 'shared.load_error': 'Shared test could not be loaded.', 'shared.loading': 'Loading shared test...', 'shared.label': 'Share', 'shared.not_available': 'Shared test not available', 'shared.title': 'Shared Test', 'shared.default_name': 'PAT Test', 'shared.hint': 'This link shows only this one test in read-only mode.', 'shared.date': 'Date', 'shared.total_points': 'Total points', 'shared.rating': 'Rating', 'shared.target_factor': 'Target {soll} · Factor {faktor}', 'shared.col_points': 'Points', 'shared.col_values': 'Values', 'shared.col_avg': 'Average', 'shared.col_target': 'Target', 'shared.col_factor': 'Factor', 'shared.col_result': 'Result', 'auth.title': 'PAT Stats', 'auth.subtitle': 'Sign in or register', 'auth.description': 'Sign in with your PAT Test account to securely manage your assessments.', 'auth.login_tab': 'Login', 'auth.register_tab': 'Register', 'auth.email': 'Email', 'auth.password': 'Password', 'auth.login_success': 'Successfully signed in', 'auth.register_success': 'Registration complete. Check your inbox for confirmation.', 'auth.sending': 'Sending...', 'auth.login_btn': 'Sign in', 'auth.register_btn': 'Create account', 'auth.back': 'Back', }, it: { 'nav.logged_in': 'Connesso', 'nav.assessments': 'Valutazioni', 'nav.analysis': 'Analisi', 'nav.profile': 'Profilo', 'nav.sign_out': 'Esci', 'nav.theme_dark': 'Modalità scura', 'nav.theme_light': 'Modalità chiara', 'nav.analysis_disabled': 'L\'analisi è disabilitata durante la modifica', 'nav.analysis_open': 'Apri analisi', 'nav.profile_disabled': 'Il profilo è disabilitato durante la modifica', 'nav.profile_open': 'Apri profilo', 'profile.title_label': 'Profilo utente', 'profile.title': 'Gestisci profilo', 'profile.description': 'Gestisci qui nome, cognome, indirizzo email, paese e la visibilità delle tue condivisioni di test.', 'profile.loading': 'Caricamento profilo...', 'profile.first_name': 'Nome', 'profile.first_name_placeholder': 'Mario', 'profile.last_name': 'Cognome', 'profile.last_name_placeholder': 'Rossi', 'profile.email': 'Indirizzo email', 'profile.email_hint': 'Se cambi l\'indirizzo email, riceverai una conferma al nuovo indirizzo.', 'profile.country': 'Paese', 'profile.country_none': 'Nessun paese selezionato', 'profile.country_hint': 'Il tuo paese', 'profile.display': 'Visualizzazione', 'profile.display_hint': 'Lingua in cui viene visualizzata l\'applicazione.', 'profile.rank': 'Classifica', 'profile.rank_placeholder': 'Segnaposto', 'profile.rank_hint': 'Qui verrà visualizzata in seguito la posizione in classifica dell\'utente.', 'profile.tests_visible_title': 'Test visibili', 'profile.tests_visible_desc': 'Quando questo interruttore è attivo, i tuoi link di condivisione funzionano. Se lo disattivi, i link esistenti vengono salvati ma non sono più visibili pubblicamente.', 'profile.visible': 'Visibile', 'profile.not_visible': 'Non visibile', 'profile.account_id': 'ID account', 'profile.delete': 'Elimina profilo', 'profile.deleting': 'Eliminazione...', 'profile.save': 'Salva profilo', 'profile.saving': 'Salvataggio...', 'profile.saved': 'Profilo salvato.', 'profile.saved_email': 'Profilo salvato. Il nuovo indirizzo email potrebbe dover essere ancora confermato via email.', 'profile.error_save': 'Impossibile salvare il profilo.', 'profile.error_delete': 'Impossibile eliminare il profilo.', 'profile.delete_confirm': 'Eliminare davvero il profilo?\n\nTutti i test di questo utente e i piani di analisi esistenti verranno rimossi definitivamente.', 'profile.deleted': 'Profilo e tutti i test sono stati eliminati. L\'account rimane e può essere configurato nuovamente.', 'patmgr.saved': 'Salvato con successo!', 'patmgr.finalized': 'La valutazione è stata finalizzata ed è ora in sola lettura.', 'patmgr.fill_name_date': 'Compila nome e data prima di salvare', 'patmgr.share_copied': 'Link di condivisione per "{label}" copiato negli appunti.', 'patmgr.share_localhost_hint': 'Nota: Il link punta attualmente a localhost ed è accessibile solo se l\'app è raggiungibile dall\'esterno.', 'patmgr.share_link_label': 'Link di condivisione per "{label}"', 'patmgr.share_error': 'Impossibile creare il link di condivisione: {error}', 'patmgr.unshare_success': 'Condivisione per "{label}" revocata.', 'patmgr.unshare_error': 'Impossibile revocare la condivisione: {error}', 'patmgr.profile_loading': 'Il profilo è ancora in caricamento. Riprova tra poco.', 'patmgr.enable_visible': 'Attiva "Test visibili" nel profilo prima di condividere i test.', 'patmgr.save_before_share': 'Salva prima il test prima di condividerlo.', 'patmgr.save_for_share': 'Salva prima in modo che lo stato attuale venga condiviso.', 'patmgr.save_first': 'Salva prima', 'patmgr.profile_loading_btn': 'Profilo in caricamento', 'patmgr.enable_visible_btn': 'Attiva "Test visibili" nel profilo', 'patlist.title': 'PAT Test Manager', 'patlist.new_assessment': 'Nuova valutazione', 'patlist.filter_name': 'Filtra per nome', 'patlist.filter_date': 'Filtra per data', 'patlist.col_name': 'Nome', 'patlist.col_date': 'Data', 'patlist.col_result': 'Risultato', 'patlist.date_placeholder': 'gg.mm.aaaa', 'patlist.prev_month': 'Mese precedente', 'patlist.next_month': 'Mese successivo', 'patlist.today': 'Oggi', 'patlist.delete': 'Elimina', 'patlist.open_assessments': 'Valutazioni aperte', 'patlist.no_open': 'Nessuna valutazione aperta trovata con i filtri attuali', 'patlist.closed_assessments': 'Valutazioni finalizzate', 'patlist.no_closed': 'Nessuna valutazione finalizzata trovata con i filtri attuali', 'patlist.no_assessments': 'Nessuna valutazione ancora', 'patlist.no_assessments_hint': 'Crea una nuova valutazione sopra e scegli PAT Start, PAT 1, PAT 2 o PAT 3', 'patlist.share_active': 'Condivisione attiva', 'patlist.share_paused': 'Condivisione in pausa', 'patlist.finalized': 'Finalizzato', 'patlist.open': 'Apri', 'patlist.count': 'Numero: {count}', 'patlist.days': 'Lu Ma Me Gi Ve Sa Do', 'detail.back': '← Torna alla panoramica', 'detail.unsaved': '● Modifiche non salvate', 'detail.finalized': 'Finalizzato', 'detail.share_active': 'Condivisione attiva', 'detail.share_paused': 'Condivisione in pausa', 'detail.save': 'Salva', 'detail.finalize': 'Finalizza', 'detail.pdf': 'PDF', 'detail.share': 'Condividi', 'detail.unshare': 'Revoca condivisione', 'detail.readonly': 'Sola lettura', 'detail.readonly_hint': 'Questa valutazione è stata finalizzata e non può più essere modificata.', 'detail.date_name': 'Data / Nome', 'detail.name_placeholder': 'Nome', 'detail.col_avg_target': 'Media obiettivo {soll}', 'detail.col_actual': 'Effettivo', 'detail.col_factor': 'Fattore', 'detail.col_points': 'Punti', 'detail.col_result': 'Risultato', 'savedialog.title': 'Modifiche non salvate', 'savedialog.message': 'Hai modifiche non salvate. Vuoi salvarle?', 'savedialog.yes': 'Sì, salva', 'savedialog.no': 'No, scarta', 'savedialog.cancel': 'Annulla', 'analysis.title': 'Analisi', 'analysis.priority_title': 'Dove dovresti migliorare?', 'analysis.priority_desc': 'Priorità secondo Gap × Fattore × Costanza basata sugli ultimi 5 assessment.', 'analysis.assessments_count': 'Valutazioni: {count}', 'analysis.window': 'Finestra analisi: {count}/5', 'analysis.limited_data': 'Base dati limitata', 'analysis.no_data': 'Nessun dato per l\'analisi', 'analysis.no_data_hint': 'Crea prima una valutazione nella sezione "Valutazioni".', 'analysis.no_type_data': 'Nessuna valutazione per {patType}', 'analysis.no_type_hint': 'Scegli un altro tipo PAT o crea una nuova valutazione.', 'weakness.no_data': 'Nessun dato sui punti deboli disponibile.', 'weakness.title': 'Top 3 Punti deboli', 'weakness.gap': 'Gap: {score}', 'weakness.consistency': 'Costanza: {score}', 'weakness.trend': 'Tendenza: {score}', 'strength.no_data': 'Nessun dato sui punti di forza disponibile.', 'strength.title': 'Top 3 Punti di forza', 'strength.actual': 'Effettivo: {score}', 'strength.target': 'Obiettivo: {score}', 'strength.trend': 'Tendenza: {score}', 'training.title': 'Piano di allenamento ({patType})', 'training.hint': '1 piano attivo + cronologia, stato sessione: aperto / completato / saltato.', 'training.reload': 'Ricarica', 'training.duration': 'Durata', 'training.2weeks': '2 settimane', 'training.4weeks': '4 settimane', 'training.6weeks': '6 settimane', 'training.sessions_per_week': 'Sessioni/settimana', 'training.generate': 'Genera piano', 'training.save_draft': 'Salva bozza', 'training.saving': 'Salvataggio…', 'training.draft_created': 'Nuova bozza creata. Puoi ora regolare intensità ed esercizi per sessione.', 'training.create_draft_first': 'Crea prima una bozza.', 'training.save_error': 'Impossibile salvare il piano di allenamento.', 'training.save_success': 'Piano di allenamento salvato. Il piano attivo precedente è stato archiviato.', 'training.week_session': 'Settimana {weekNo} · Sessione {sessionNo}', 'training.main_exercise': 'Esercizio principale', 'training.side_exercises': 'Esercizi secondari, separati da virgola', 'training.high': 'alto', 'training.medium': 'medio', 'training.easy': 'facile', 'training.draft_label': 'Bozza (parzialmente modificabile)', 'training.sessions_info': 'Sessioni: {count} · alto {high} · medio {medium} · facile {easy}', 'training.active_plan': 'Piano attivo', 'training.loading': 'Caricamento…', 'training.no_active': 'Nessun piano di allenamento attivo.', 'training.generated': 'Generato: {date} · {weeks} settimane · {sessions} sessioni/settimana', 'training.week_short': 'S{weekNo} · E{sessionNo}', 'training.status_open': 'aperto', 'training.status_done': 'completato', 'training.status_skipped': 'saltato', 'training.note': 'Nota', 'training.history': 'Cronologia piani', 'training.no_history': 'Nessun piano archiviato disponibile.', 'gapchart.no_data': 'Nessun grafico gap disponibile.', 'gapchart.title': 'Grafico Gap (Priorità)', 'gapchart.aria': 'Grafico a barre gap', 'live.title': 'Panoramica live', 'live.stats_title': 'Statistiche attuali', 'live.basis': 'Base: tutte le valutazioni, caricate all\'apertura della pagina', 'live.loading': 'Caricamento…', 'live.timestamp': 'Aggiornato: ora', 'live.no_data': 'Nessuna valutazione ancora. Crea una nuova valutazione per vedere i valori live.', 'live.count': 'Valutazioni', 'live.count_desc': 'Salvate nel database PAT', 'live.avg_points': 'Ø Punti totali', 'live.avg_desc': 'Media di tutti gli assessment', 'live.last': 'Ultima valutazione', 'live.unnamed': 'Senza nome', 'live.top': 'Risultato migliore', 'shared.missing_token': 'Link di condivisione mancante.', 'shared.invalid': 'Questo link di condivisione non è valido, è disabilitato o non è attualmente visibile pubblicamente.', 'shared.load_error': 'Impossibile caricare il test condiviso.', 'shared.loading': 'Caricamento test condiviso...', 'shared.label': 'Condivisione', 'shared.not_available': 'Test condiviso non disponibile', 'shared.title': 'Test condiviso', 'shared.default_name': 'PAT Test', 'shared.hint': 'Questo link mostra solo questo test in modalità sola lettura.', 'shared.date': 'Data', 'shared.total_points': 'Punti totali', 'shared.rating': 'Valutazione', 'shared.target_factor': 'Obiettivo {soll} · Fattore {faktor}', 'shared.col_points': 'Punti', 'shared.col_values': 'Valori', 'shared.col_avg': 'Media', 'shared.col_target': 'Obiettivo', 'shared.col_factor': 'Fattore', 'shared.col_result': 'Risultato', 'auth.title': 'PAT Stats', 'auth.subtitle': 'Accedi o registrati', 'auth.description': 'Accedi con il tuo account PAT Test per gestire le tue valutazioni in modo sicuro.', 'auth.login_tab': 'Login', 'auth.register_tab': 'Registrati', 'auth.email': 'Email', 'auth.password': 'Password', 'auth.login_success': 'Accesso effettuato con successo', 'auth.register_success': 'Registrazione completata. Controlla la tua casella di posta per la conferma.', 'auth.sending': 'Invio in corso...', 'auth.login_btn': 'Accedi', 'auth.register_btn': 'Crea account', 'auth.back': 'Indietro', }, es: { 'nav.logged_in': 'Conectado', 'nav.assessments': 'Evaluaciones', 'nav.analysis': 'Análisis', 'nav.profile': 'Perfil', 'nav.sign_out': 'Cerrar sesión', 'nav.theme_dark': 'Modo oscuro', 'nav.theme_light': 'Modo claro', 'nav.analysis_disabled': 'El análisis está deshabilitado durante la edición', 'nav.analysis_open': 'Abrir análisis', 'nav.profile_disabled': 'El perfil está deshabilitado durante la edición', 'nav.profile_open': 'Abrir perfil', 'profile.title_label': 'Perfil de usuario', 'profile.title': 'Gestionar perfil', 'profile.description': 'Administra aquí tu nombre, apellido, dirección de correo, país y la visibilidad de tus comparticiones de pruebas.', 'profile.loading': 'Cargando perfil...', 'profile.first_name': 'Nombre', 'profile.first_name_placeholder': 'Juan', 'profile.last_name': 'Apellido', 'profile.last_name_placeholder': 'García', 'profile.email': 'Dirección de correo', 'profile.email_hint': 'Si cambias tu dirección de correo, se enviará una confirmación a la nueva dirección.', 'profile.country': 'País', 'profile.country_none': 'Ningún país seleccionado', 'profile.country_hint': 'Tu país', 'profile.display': 'Visualización', 'profile.display_hint': 'Idioma en el que se muestra la aplicación.', 'profile.rank': 'Posición en el ranking', 'profile.rank_placeholder': 'Marcador de posición', 'profile.rank_hint': 'Aquí se mostrará más adelante la posición en el ranking del usuario.', 'profile.tests_visible_title': 'Pruebas visibles', 'profile.tests_visible_desc': 'Cuando este interruptor está activo, tus enlaces de compartición funcionan. Si lo desactivas, los enlaces existentes se guardan pero ya no son visibles públicamente.', 'profile.visible': 'Visible', 'profile.not_visible': 'No visible', 'profile.account_id': 'ID de cuenta', 'profile.delete': 'Eliminar perfil', 'profile.deleting': 'Eliminando...', 'profile.save': 'Guardar perfil', 'profile.saving': 'Guardando...', 'profile.saved': 'Perfil guardado.', 'profile.saved_email': 'Perfil guardado. Es posible que la nueva dirección de correo deba confirmarse por correo electrónico.', 'profile.error_save': 'No se pudo guardar el perfil.', 'profile.error_delete': 'No se pudo eliminar el perfil.', 'profile.delete_confirm': '¿Realmente eliminar el perfil?\n\nEsto eliminará permanentemente todas las pruebas de este usuario y los planes de análisis existentes.', 'profile.deleted': 'El perfil y todas las pruebas han sido eliminados. La cuenta permanece y puede volver a configurarse.', 'patmgr.saved': '¡Guardado con éxito!', 'patmgr.finalized': 'La evaluación ha sido finalizada y ahora es de solo lectura.', 'patmgr.fill_name_date': 'Por favor, completa nombre y fecha antes de guardar', 'patmgr.share_copied': 'Enlace de compartición para "{label}" copiado al portapapeles.', 'patmgr.share_localhost_hint': 'Nota: El enlace apunta actualmente a localhost y solo es accesible si la app es alcanzable desde fuera.', 'patmgr.share_link_label': 'Enlace de compartición para "{label}"', 'patmgr.share_error': 'No se pudo crear el enlace de compartición: {error}', 'patmgr.unshare_success': 'Compartición para "{label}" revocada.', 'patmgr.unshare_error': 'No se pudo revocar la compartición: {error}', 'patmgr.profile_loading': 'El perfil aún se está cargando. Por favor, inténtalo de nuevo en un momento.', 'patmgr.enable_visible': 'Activa "Pruebas visibles" en tu perfil antes de compartir pruebas.', 'patmgr.save_before_share': 'Por favor, guarda la prueba primero antes de compartirla.', 'patmgr.save_for_share': 'Por favor, guarda primero para que se comparta el estado actual.', 'patmgr.save_first': 'Por favor, guarda primero', 'patmgr.profile_loading_btn': 'Cargando perfil', 'patmgr.enable_visible_btn': 'Activa "Pruebas visibles" en el perfil', 'patlist.title': 'PAT Test Manager', 'patlist.new_assessment': 'Nueva evaluación', 'patlist.filter_name': 'Filtrar por nombre', 'patlist.filter_date': 'Filtrar por fecha', 'patlist.col_name': 'Nombre', 'patlist.col_date': 'Fecha', 'patlist.col_result': 'Resultado', 'patlist.date_placeholder': 'dd.mm.aaaa', 'patlist.prev_month': 'Mes anterior', 'patlist.next_month': 'Mes siguiente', 'patlist.today': 'Hoy', 'patlist.delete': 'Eliminar', 'patlist.open_assessments': 'Evaluaciones abiertas', 'patlist.no_open': 'No se encontraron evaluaciones abiertas con los filtros actuales', 'patlist.closed_assessments': 'Evaluaciones finalizadas', 'patlist.no_closed': 'No se encontraron evaluaciones finalizadas con los filtros actuales', 'patlist.no_assessments': 'Aún no hay evaluaciones', 'patlist.no_assessments_hint': 'Crea una nueva evaluación arriba y elige PAT Start, PAT 1, PAT 2 o PAT 3', 'patlist.share_active': 'Compartición activa', 'patlist.share_paused': 'Compartición pausada', 'patlist.finalized': 'Finalizado', 'patlist.open': 'Abrir', 'patlist.count': 'Cantidad: {count}', 'patlist.days': 'Lu Ma Mi Ju Vi Sá Do', 'detail.back': '← Volver a la vista general', 'detail.unsaved': '● Cambios sin guardar', 'detail.finalized': 'Finalizado', 'detail.share_active': 'Compartición activa', 'detail.share_paused': 'Compartición pausada', 'detail.save': 'Guardar', 'detail.finalize': 'Finalizar', 'detail.pdf': 'PDF', 'detail.share': 'Compartir', 'detail.unshare': 'Revocar compartición', 'detail.readonly': 'Solo lectura', 'detail.readonly_hint': 'Esta evaluación ha sido finalizada y ya no puede editarse.', 'detail.date_name': 'Fecha / Nombre', 'detail.name_placeholder': 'Nombre', 'detail.col_avg_target': 'Promedio objetivo {soll}', 'detail.col_actual': 'Real', 'detail.col_factor': 'Factor', 'detail.col_points': 'Puntos', 'detail.col_result': 'Resultado', 'savedialog.title': 'Cambios sin guardar', 'savedialog.message': 'Tienes cambios sin guardar. ¿Deseas guardarlos?', 'savedialog.yes': 'Sí, guardar', 'savedialog.no': 'No, descartar', 'savedialog.cancel': 'Cancelar', 'analysis.title': 'Análisis', 'analysis.priority_title': '¿Dónde deberías mejorar?', 'analysis.priority_desc': 'Priorizado por Gap × Factor × Consistencia basado en las últimas 5 evaluaciones.', 'analysis.assessments_count': 'Evaluaciones: {count}', 'analysis.window': 'Ventana de análisis: {count}/5', 'analysis.limited_data': 'Base de datos limitada', 'analysis.no_data': 'Aún no hay datos para el análisis', 'analysis.no_data_hint': 'Crea primero una evaluación en la sección "Evaluaciones".', 'analysis.no_type_data': 'No hay evaluaciones para {patType}', 'analysis.no_type_hint': 'Elige otro tipo PAT o crea una nueva evaluación.', 'weakness.no_data': 'No hay datos de puntos débiles disponibles.', 'weakness.title': 'Top 3 Puntos débiles', 'weakness.gap': 'Gap: {score}', 'weakness.consistency': 'Consistencia: {score}', 'weakness.trend': 'Tendencia: {score}', 'strength.no_data': 'No hay datos de puntos fuertes disponibles.', 'strength.title': 'Top 3 Puntos fuertes', 'strength.actual': 'Real: {score}', 'strength.target': 'Objetivo: {score}', 'strength.trend': 'Tendencia: {score}', 'training.title': 'Plan de entrenamiento ({patType})', 'training.hint': '1 plan activo + historial, estado de sesión: abierto / completado / omitido.', 'training.reload': 'Recargar', 'training.duration': 'Duración', 'training.2weeks': '2 semanas', 'training.4weeks': '4 semanas', 'training.6weeks': '6 semanas', 'training.sessions_per_week': 'Sesiones/semana', 'training.generate': 'Generar plan', 'training.save_draft': 'Guardar borrador', 'training.saving': 'Guardando…', 'training.draft_created': 'Nuevo borrador creado. Ahora puedes ajustar la intensidad y los ejercicios por sesión.', 'training.create_draft_first': 'Crea primero un borrador.', 'training.save_error': 'No se pudo guardar el plan de entrenamiento.', 'training.save_success': 'Plan de entrenamiento guardado. El plan activo anterior ha sido archivado.', 'training.week_session': 'Semana {weekNo} · Sesión {sessionNo}', 'training.main_exercise': 'Ejercicio principal', 'training.side_exercises': 'Ejercicios secundarios, separados por coma', 'training.high': 'alto', 'training.medium': 'medio', 'training.easy': 'fácil', 'training.draft_label': 'Borrador (parcialmente editable)', 'training.sessions_info': 'Sesiones: {count} · alto {high} · medio {medium} · fácil {easy}', 'training.active_plan': 'Plan activo', 'training.loading': 'Cargando…', 'training.no_active': 'Aún no hay plan de entrenamiento activo.', 'training.generated': 'Generado: {date} · {weeks} semanas · {sessions} sesiones/semana', 'training.week_short': 'S{weekNo} · E{sessionNo}', 'training.status_open': 'abierto', 'training.status_done': 'completado', 'training.status_skipped': 'omitido', 'training.note': 'Nota', 'training.history': 'Historial de planes', 'training.no_history': 'No hay planes archivados disponibles.', 'gapchart.no_data': 'No hay gráfico de gap disponible.', 'gapchart.title': 'Gráfico de Gap (Prioridad)', 'gapchart.aria': 'Gráfico de barras de gap', 'live.title': 'Vista en vivo', 'live.stats_title': 'Estadísticas actuales', 'live.basis': 'Base: todas las evaluaciones, cargadas al abrir la página', 'live.loading': 'Cargando…', 'live.timestamp': 'Actualizado: ahora', 'live.no_data': 'Aún no hay evaluaciones. Crea una nueva evaluación para ver valores en vivo aquí.', 'live.count': 'Evaluaciones', 'live.count_desc': 'Almacenadas en la base de datos PAT', 'live.avg_points': 'Ø Puntos totales', 'live.avg_desc': 'Promedio de todas las evaluaciones', 'live.last': 'Última evaluación', 'live.unnamed': 'Sin nombre', 'live.top': 'Mejor resultado', 'shared.missing_token': 'Falta el enlace de compartición.', 'shared.invalid': 'Este enlace de compartición no es válido, está desactivado o no es visible públicamente.', 'shared.load_error': 'No se pudo cargar el test compartido.', 'shared.loading': 'Cargando test compartido...', 'shared.label': 'Compartición', 'shared.not_available': 'Test compartido no disponible', 'shared.title': 'Test compartido', 'shared.default_name': 'PAT Test', 'shared.hint': 'Este enlace muestra solo este test en modo de solo lectura.', 'shared.date': 'Fecha', 'shared.total_points': 'Puntos totales', 'shared.rating': 'Evaluación', 'shared.target_factor': 'Objetivo {soll} · Factor {faktor}', 'shared.col_points': 'Puntos', 'shared.col_values': 'Valores', 'shared.col_avg': 'Promedio', 'shared.col_target': 'Objetivo', 'shared.col_factor': 'Factor', 'shared.col_result': 'Resultado', 'auth.title': 'PAT Stats', 'auth.subtitle': 'Iniciar sesión o registrarse', 'auth.description': 'Inicia sesión con tu cuenta PAT Test para gestionar tus evaluaciones de forma segura.', 'auth.login_tab': 'Login', 'auth.register_tab': 'Registrarse', 'auth.email': 'Correo electrónico', 'auth.password': 'Contraseña', 'auth.login_success': 'Sesión iniciada con éxito', 'auth.register_success': 'Registro completado. Revisa tu bandeja de entrada para confirmar.', 'auth.sending': 'Enviando...', 'auth.login_btn': 'Iniciar sesión', 'auth.register_btn': 'Crear cuenta', 'auth.back': 'Volver', }, pt: { 'nav.logged_in': 'Conectado', 'nav.assessments': 'Avaliações', 'nav.analysis': 'Análise', 'nav.profile': 'Perfil', 'nav.sign_out': 'Sair', 'nav.theme_dark': 'Modo escuro', 'nav.theme_light': 'Modo claro', 'nav.analysis_disabled': 'A análise está desativada durante a edição', 'nav.analysis_open': 'Abrir análise', 'nav.profile_disabled': 'O perfil está desativado durante a edição', 'nav.profile_open': 'Abrir perfil', 'profile.title_label': 'Perfil do utilizador', 'profile.title': 'Gerir perfil', 'profile.description': 'Gira aqui o seu nome, apelido, endereço de e-mail, país e a visibilidade das suas partilhas de testes.', 'profile.loading': 'A carregar perfil...', 'profile.first_name': 'Nome próprio', 'profile.first_name_placeholder': 'João', 'profile.last_name': 'Apelido', 'profile.last_name_placeholder': 'Silva', 'profile.email': 'Endereço de e-mail', 'profile.email_hint': 'Se alterar o endereço de e-mail, será enviada uma confirmação para o novo endereço.', 'profile.country': 'País', 'profile.country_none': 'Nenhum país selecionado', 'profile.country_hint': 'O seu país', 'profile.display': 'Exibição', 'profile.display_hint': 'Idioma em que a aplicação é exibida.', 'profile.rank': 'Classificação', 'profile.rank_placeholder': 'Marcador', 'profile.rank_hint': 'Aqui será exibida posteriormente a posição do utilizador no ranking.', 'profile.tests_visible_title': 'Testes visíveis', 'profile.tests_visible_desc': 'Quando este interruptor está ativo, os seus links de partilha funcionam. Se o desativar, os links existentes são guardados mas deixam de ser visíveis publicamente.', 'profile.visible': 'Visível', 'profile.not_visible': 'Não visível', 'profile.account_id': 'ID da conta', 'profile.delete': 'Eliminar perfil', 'profile.deleting': 'A eliminar...', 'profile.save': 'Guardar perfil', 'profile.saving': 'A guardar...', 'profile.saved': 'Perfil guardado.', 'profile.saved_email': 'Perfil guardado. O novo endereço de e-mail pode ainda precisar de confirmação por e-mail.', 'profile.error_save': 'Não foi possível guardar o perfil.', 'profile.error_delete': 'Não foi possível eliminar o perfil.', 'profile.delete_confirm': 'Eliminar realmente o perfil?\n\nIsso removerá permanentemente todos os testes deste utilizador e os planos de análise existentes.', 'profile.deleted': 'Perfil e todos os testes foram eliminados. A conta permanece e pode ser configurada novamente.', 'patmgr.saved': 'Guardado com sucesso!', 'patmgr.finalized': 'A avaliação foi finalizada e agora é somente leitura.', 'patmgr.fill_name_date': 'Por favor, preencha nome e data antes de guardar', 'patmgr.share_copied': 'Link de partilha para "{label}" copiado para a área de transferência.', 'patmgr.share_localhost_hint': 'Nota: O link aponta atualmente para localhost e só é acessível se a app estiver acessível externamente.', 'patmgr.share_link_label': 'Link de partilha para "{label}"', 'patmgr.share_error': 'Não foi possível criar o link de partilha: {error}', 'patmgr.unshare_success': 'Partilha para "{label}" revogada.', 'patmgr.unshare_error': 'Não foi possível revogar a partilha: {error}', 'patmgr.profile_loading': 'O perfil ainda está a carregar. Por favor, tente novamente em breve.', 'patmgr.enable_visible': 'Ative "Testes visíveis" no perfil antes de partilhar testes.', 'patmgr.save_before_share': 'Por favor, guarde o teste primeiro antes de o partilhar.', 'patmgr.save_for_share': 'Por favor, guarde primeiro para que o estado atual seja partilhado.', 'patmgr.save_first': 'Por favor, guarde primeiro', 'patmgr.profile_loading_btn': 'A carregar perfil', 'patmgr.enable_visible_btn': 'Ative "Testes visíveis" no perfil', 'patlist.title': 'PAT Test Manager', 'patlist.new_assessment': 'Nova avaliação', 'patlist.filter_name': 'Filtrar por nome', 'patlist.filter_date': 'Filtrar por data', 'patlist.col_name': 'Nome', 'patlist.col_date': 'Data', 'patlist.col_result': 'Resultado', 'patlist.date_placeholder': 'dd.mm.aaaa', 'patlist.prev_month': 'Mês anterior', 'patlist.next_month': 'Próximo mês', 'patlist.today': 'Hoje', 'patlist.delete': 'Eliminar', 'patlist.open_assessments': 'Avaliações abertas', 'patlist.no_open': 'Nenhuma avaliação aberta encontrada com os filtros atuais', 'patlist.closed_assessments': 'Avaliações finalizadas', 'patlist.no_closed': 'Nenhuma avaliação finalizada encontrada com os filtros atuais', 'patlist.no_assessments': 'Ainda não há avaliações', 'patlist.no_assessments_hint': 'Crie uma nova avaliação acima e escolha PAT Start, PAT 1, PAT 2 ou PAT 3', 'patlist.share_active': 'Partilha ativa', 'patlist.share_paused': 'Partilha pausada', 'patlist.finalized': 'Finalizado', 'patlist.open': 'Abrir', 'patlist.count': 'Quantidade: {count}', 'patlist.days': 'Se Te Qu Qu Se Sá Do', 'detail.back': '← Voltar à vista geral', 'detail.unsaved': '● Alterações não guardadas', 'detail.finalized': 'Finalizado', 'detail.share_active': 'Partilha ativa', 'detail.share_paused': 'Partilha pausada', 'detail.save': 'Guardar', 'detail.finalize': 'Finalizar', 'detail.pdf': 'PDF', 'detail.share': 'Partilhar', 'detail.unshare': 'Revogar partilha', 'detail.readonly': 'Somente leitura', 'detail.readonly_hint': 'Esta avaliação foi finalizada e já não pode ser editada.', 'detail.date_name': 'Data / Nome', 'detail.name_placeholder': 'Nome', 'detail.col_avg_target': 'Média objetivo {soll}', 'detail.col_actual': 'Real', 'detail.col_factor': 'Fator', 'detail.col_points': 'Pontos', 'detail.col_result': 'Resultado', 'savedialog.title': 'Alterações não guardadas', 'savedialog.message': 'Tem alterações não guardadas. Deseja guardá-las?', 'savedialog.yes': 'Sim, guardar', 'savedialog.no': 'Não, descartar', 'savedialog.cancel': 'Cancelar', 'analysis.title': 'Análise', 'analysis.priority_title': 'Onde deve melhorar?', 'analysis.priority_desc': 'Priorizado por Gap × Fator × Consistência com base nas últimas 5 avaliações.', 'analysis.assessments_count': 'Avaliações: {count}', 'analysis.window': 'Janela de análise: {count}/5', 'analysis.limited_data': 'Base de dados limitada', 'analysis.no_data': 'Ainda não há dados para a análise', 'analysis.no_data_hint': 'Crie primeiro uma avaliação na secção "Avaliações".', 'analysis.no_type_data': 'Sem avaliações para {patType}', 'analysis.no_type_hint': 'Escolha outro tipo PAT ou crie uma nova avaliação.', 'weakness.no_data': 'Sem dados de pontos fracos disponíveis.', 'weakness.title': 'Top 3 Pontos fracos', 'weakness.gap': 'Gap: {score}', 'weakness.consistency': 'Consistência: {score}', 'weakness.trend': 'Tendência: {score}', 'strength.no_data': 'Sem dados de pontos fortes disponíveis.', 'strength.title': 'Top 3 Pontos fortes', 'strength.actual': 'Real: {score}', 'strength.target': 'Objetivo: {score}', 'strength.trend': 'Tendência: {score}', 'training.title': 'Plano de treino ({patType})', 'training.hint': '1 plano ativo + histórico, estado da sessão: aberto / concluído / ignorado.', 'training.reload': 'Recarregar', 'training.duration': 'Duração', 'training.2weeks': '2 semanas', 'training.4weeks': '4 semanas', 'training.6weeks': '6 semanas', 'training.sessions_per_week': 'Sessões/semana', 'training.generate': 'Gerar plano', 'training.save_draft': 'Guardar rascunho', 'training.saving': 'A guardar…', 'training.draft_created': 'Novo rascunho criado. Pode agora ajustar intensidade e exercícios por sessão.', 'training.create_draft_first': 'Crie primeiro um rascunho.', 'training.save_error': 'Não foi possível guardar o plano de treino.', 'training.save_success': 'Plano de treino guardado. O plano ativo anterior foi arquivado.', 'training.week_session': 'Semana {weekNo} · Sessão {sessionNo}', 'training.main_exercise': 'Exercício principal', 'training.side_exercises': 'Exercícios secundários, separados por vírgula', 'training.high': 'alto', 'training.medium': 'médio', 'training.easy': 'fácil', 'training.draft_label': 'Rascunho (parcialmente editável)', 'training.sessions_info': 'Sessões: {count} · alto {high} · médio {medium} · fácil {easy}', 'training.active_plan': 'Plano ativo', 'training.loading': 'A carregar…', 'training.no_active': 'Ainda não há plano de treino ativo.', 'training.generated': 'Gerado: {date} · {weeks} semanas · {sessions} sessões/semana', 'training.week_short': 'S{weekNo} · E{sessionNo}', 'training.status_open': 'aberto', 'training.status_done': 'concluído', 'training.status_skipped': 'ignorado', 'training.note': 'Nota', 'training.history': 'Histórico de planos', 'training.no_history': 'Sem planos arquivados disponíveis.', 'gapchart.no_data': 'Sem gráfico de gap disponível.', 'gapchart.title': 'Gráfico de Gap (Prioridade)', 'gapchart.aria': 'Gráfico de barras de gap', 'live.title': 'Vista em direto', 'live.stats_title': 'Estatísticas atuais', 'live.basis': 'Base: todas as avaliações, carregadas ao abrir a página', 'live.loading': 'A carregar…', 'live.timestamp': 'Atualizado: agora', 'live.no_data': 'Ainda não há avaliações. Crie uma nova avaliação para ver valores em direto aqui.', 'live.count': 'Avaliações', 'live.count_desc': 'Guardadas na base de dados PAT', 'live.avg_points': 'Ø Pontos totais', 'live.avg_desc': 'Média de todas as avaliações', 'live.last': 'Última avaliação', 'live.unnamed': 'Sem nome', 'live.top': 'Melhor resultado', 'shared.missing_token': 'Link de partilha em falta.', 'shared.invalid': 'Este link de partilha é inválido, está desativado ou não está atualmente visível publicamente.', 'shared.load_error': 'Não foi possível carregar o teste partilhado.', 'shared.loading': 'A carregar teste partilhado...', 'shared.label': 'Partilha', 'shared.not_available': 'Teste partilhado não disponível', 'shared.title': 'Teste partilhado', 'shared.default_name': 'PAT Test', 'shared.hint': 'Este link mostra apenas este teste em modo de somente leitura.', 'shared.date': 'Data', 'shared.total_points': 'Pontos totais', 'shared.rating': 'Avaliação', 'shared.target_factor': 'Objetivo {soll} · Fator {faktor}', 'shared.col_points': 'Pontos', 'shared.col_values': 'Valores', 'shared.col_avg': 'Média', 'shared.col_target': 'Objetivo', 'shared.col_factor': 'Fator', 'shared.col_result': 'Resultado', 'auth.title': 'PAT Stats', 'auth.subtitle': 'Entrar ou registar', 'auth.description': 'Entre com a sua conta PAT Test para gerir as suas avaliações de forma segura.', 'auth.login_tab': 'Login', 'auth.register_tab': 'Registar', 'auth.email': 'E-mail', 'auth.password': 'Palavra-passe', 'auth.login_success': 'Sessão iniciada com sucesso', 'auth.register_success': 'Registo concluído. Verifique a sua caixa de entrada para confirmação.', 'auth.sending': 'A enviar...', 'auth.login_btn': 'Entrar', 'auth.register_btn': 'Criar conta', 'auth.back': 'Voltar', }, }; const SUPPORTED_LANGUAGES = ['de', 'en', 'it', 'es', 'pt']; export function getTranslator(language) { const lang = SUPPORTED_LANGUAGES.includes(language) ? language : 'de'; const dict = translations[lang]; const fallback = translations.de; return (key, vars) => { let str = dict[key] ?? fallback[key] ?? key; if (vars) { str = str.replace(/\{(\w+)\}/g, (_, k) => (vars[k] !== undefined ? vars[k] : `{${k}}`)); } return str; }; } export { SUPPORTED_LANGUAGES }; export default translations;