No gamification existed at all - nothing rewarded consistency or gave users a reason to come back beyond the raw session stats already on the dashboard. Adds a Gamification helper that derives (not stores) a current/longest daily streak from completed WorkoutSessions and six badges (first session, 10 and 50 sessions, 7- and 30-day streaks, a 100kg+ completed lift) from existing session/session-item data - no new tables, since everything needed is already recorded. Found and fixed a real Carbon 3 behavior change via testing: diffInDays() no longer returns an absolute value by default (unlike Carbon 2) - it returns a signed float. My longest-streak calculation used a strict === 1 check against the raw result, which silently always failed because float(-1) or float(1) never strictly equals int 1. Fixed with abs() plus an explicit (int) cast. Worth remembering for any other diffIn*() usage in this codebase going forward. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
359 lines
16 KiB
PHP
359 lines
16 KiB
PHP
<?php
|
||
|
||
return [
|
||
'nav' => [
|
||
'exercises' => 'Exerciții',
|
||
'yoga' => 'Yoga',
|
||
'workouts' => 'Antrenamente',
|
||
'blog' => 'Blog',
|
||
'build_workout' => 'Creează un antrenament',
|
||
'dashboard' => 'Tabloul de bord',
|
||
'programs' => 'Programe',
|
||
'clients' => 'Clienți',
|
||
'admin' => 'Admin',
|
||
'profile' => 'Profil',
|
||
'logout' => 'Deconectare',
|
||
'login' => 'Autentificare',
|
||
'register' => 'Înregistrare',
|
||
'enable_dark' => 'Activează Modul Închis',
|
||
'disable_dark' => 'Dezactivează Modul Închis',
|
||
'language' => 'Limba',
|
||
'english' => 'Engleză',
|
||
'romanian' => 'Română',
|
||
],
|
||
|
||
'home' => [
|
||
'badge' => 'Nou • Descoperă peste 1.000 de mișcări',
|
||
'title' => 'Descoperă peste 1.000 de exerciții. Construiește antrenamentul perfect.',
|
||
'subtitle' => 'Explorează FitAtlas pentru a găsi exerciții după grupă musculară și echipament, apoi creează rutine potrivite obiectivelor tale.',
|
||
'search_placeholder' => 'Caută exerciții (ex: flotări, gantere, spate)',
|
||
'search' => 'Caută',
|
||
'filters' => [
|
||
'arms' => 'Brațe',
|
||
'chest' => 'Piept',
|
||
'legs' => 'Picioare',
|
||
'core' => 'Trunchi',
|
||
'back' => 'Spate',
|
||
],
|
||
'featured' => 'Exerciții recomandate',
|
||
'browse_all' => 'Vezi toate',
|
||
'favorites' => 'Favorite',
|
||
'favorites_desc' => 'O rutină echilibrată care vizează toate grupele musculare principale. Potrivită pentru majoritatea nivelurilor și ușor de adaptat în funcție de echipamentul disponibil.',
|
||
'try_routine' => 'Încearcă această rutină',
|
||
'features' => [
|
||
'title' => 'Tot ce ai nevoie pentru a te antrena mai inteligent',
|
||
'subtitle' => 'Instrumente puternice pentru a planifica antrenamente, a învăța mișcări și a-ți urmări progresul — într-un singur loc.',
|
||
'items' => [
|
||
'tracking' => [
|
||
'title' => 'Urmărirea sesiunilor',
|
||
'desc' => 'Bifează exercițiile pe parcurs și marchează sesiunile ca finalizate pentru a vedea consistența.',
|
||
],
|
||
'library' => [
|
||
'title' => 'Bibliotecă bogată de exerciții',
|
||
'desc' => 'Răsfoiește peste 1.000 de mișcări cu mușchi țintă, echipament și instrucțiuni clare.',
|
||
],
|
||
'plans' => [
|
||
'title' => 'Antrenamente personalizate',
|
||
'desc' => 'Construiește rutine potrivite obiectivelor și echipamentului disponibil.',
|
||
],
|
||
'yoga' => [
|
||
'title' => 'Poziții de yoga',
|
||
'desc' => 'Caută și învață poziții de yoga după categorie și beneficii, cu imagini.',
|
||
],
|
||
'progress' => [
|
||
'title' => 'Tablou de bord al progresului',
|
||
'desc' => 'Vezi rata de finalizare, sesiuni recente și activitatea din ultimele 30 de zile dintr-o privire.',
|
||
],
|
||
'community' => [
|
||
'title' => 'Personalizare',
|
||
'desc' => 'Redenumește exercițiile pentru tine și adaugă la favorite pe cele folosite cel mai des.',
|
||
],
|
||
],
|
||
],
|
||
'pricing' => [
|
||
'title' => 'Prețuri simple',
|
||
'subtitle' => 'Începe gratuit. Fă upgrade oricând pentru mai multe funcții.',
|
||
'cta' => 'Începe acum',
|
||
'plans' => [
|
||
'free' => [
|
||
'name' => 'Gratuit',
|
||
'price' => '0 RON',
|
||
'period' => '/ pentru totdeauna',
|
||
'desc' => 'Tot ce îți trebuie pentru a începe.',
|
||
'features' => [
|
||
'feature1' => 'Căutare și filtre pentru exerciții',
|
||
'feature2' => 'Construiește și gestionează antrenamente',
|
||
'feature3' => 'Catalog de poziții yoga',
|
||
'feature4' => 'Statistici de bază în tablou',
|
||
],
|
||
],
|
||
'pro' => [
|
||
'name' => 'Pro',
|
||
'price' => '9 $',
|
||
'period' => '/ lună',
|
||
'desc' => 'Analize și personalizare aprofundate.',
|
||
'features' => [
|
||
'feature1' => 'Analitice avansate de progres',
|
||
'feature2' => 'Favorite și aliasuri nelimitate',
|
||
'feature3' => 'Actualizări de date prioritare',
|
||
'feature4' => 'Acces anticipat la funcții',
|
||
'feature5' => 'Suport prin email',
|
||
],
|
||
],
|
||
'ultimate' => [
|
||
'name' => 'Ultimate',
|
||
'price' => '19 $',
|
||
'period' => '/ lună',
|
||
'desc' => 'Pentru utilizatori avansați și pasionați.',
|
||
'features' => [
|
||
'feature1' => 'Tot din Pro',
|
||
'feature2' => 'Extra opțiuni de personalizare',
|
||
'feature3' => 'Suport prioritar',
|
||
],
|
||
],
|
||
],
|
||
],
|
||
'faq' => [
|
||
'title' => 'Întrebări frecvente',
|
||
'subtitle' => 'Dacă nu găsești răspunsul, scrie-ne și te ajutăm.',
|
||
'q1' => 'FitAtlas este gratuit?',
|
||
'a1' => 'Da. Poți răsfoi exerciții, crea antrenamente și urmări sesiuni gratuit.',
|
||
'q2' => 'Ce este Tabloul de bord?',
|
||
'a2' => 'Centrul tău personal cu statistici precum rata de finalizare, sesiuni recente și activitate pe 30 de zile.',
|
||
'q3' => 'Aveți suport pentru yoga?',
|
||
'a3' => 'Da. Răsfoiește categorii și poziții de yoga, filtrează după beneficii și vezi pagini detaliate.',
|
||
'q4' => 'Pot redenumi exercițiile?',
|
||
'a4' => 'Da. Poți seta nume personalizate vizibile doar pentru tine pe pagina fiecărui exercițiu.',
|
||
'q5' => 'Va exista un plan Pro?',
|
||
'a5' => 'Prețurile sunt orientative. Poți începe gratuit și face upgrade ulterior dacă ai nevoie.',
|
||
'q6' => 'Ce limbi sunt disponibile?',
|
||
'a6' => 'Engleză și Română. Schimbă limba din antet.',
|
||
],
|
||
],
|
||
|
||
'workouts' => [
|
||
'my_workouts' => 'Antrenamentele mele',
|
||
'manage_desc' => 'Creează rutine și gestionează exercițiile.',
|
||
'new_workout' => 'Antrenament nou',
|
||
'none_yet' => 'Încă nu există antrenamente. Creează primul tău antrenament.',
|
||
'open' => 'Deschide',
|
||
'delete' => 'Șterge',
|
||
'confirm_delete' => 'Ștergi acest antrenament?',
|
||
|
||
'create_title' => 'Creează antrenament',
|
||
'create_desc' => 'Dă un nume antrenamentului și, opțional, adaugă detalii.',
|
||
'title_label' => 'Titlu',
|
||
'estimated_minutes' => 'Minute estimate',
|
||
'notes' => 'Notițe',
|
||
'cancel' => 'Anulează',
|
||
'create_submit' => 'Creează antrenament',
|
||
|
||
'back_to_workouts' => '← Înapoi la Antrenamente',
|
||
'favorited' => 'La favorite',
|
||
'favorite' => 'Adaugă la favorite',
|
||
'min' => 'min',
|
||
'exercises_count' => 'exerciții',
|
||
'exercises' => 'Exerciții',
|
||
'no_exercises_yet' => 'Încă nu există exerciții. Adaugă primul în dreapta.',
|
||
'remove_exercise_confirm' => 'Elimini acest exercițiu?',
|
||
'remove' => 'Elimină',
|
||
'edit' => 'Editează',
|
||
'position_ph' => 'Poziție',
|
||
'sets' => 'Seturi',
|
||
'reps' => 'Repetări',
|
||
'weight' => 'Greutate (kg)',
|
||
'rest' => 'Pauză (s)',
|
||
'save' => 'Salvează',
|
||
'add_exercise' => 'Adaugă exercițiu',
|
||
'exercise_label' => 'Exercițiu',
|
||
'add_exercise_submit' => 'Adaugă exercițiu',
|
||
'rest_suffix' => 's pauză',
|
||
'kg' => 'kg',
|
||
],
|
||
|
||
'exercises' => [
|
||
'browse' => 'Răsfoiește exercițiile',
|
||
'browse_desc' => 'Explorează întreaga bibliotecă FitAtlas. Filtrează după zonă, mușchi sau echipament.',
|
||
'search' => 'Căutare',
|
||
'search_placeholder' => 'Caută după nume sau instrucțiuni',
|
||
'body_part' => 'Zonă',
|
||
'muscle' => 'Mușchi',
|
||
'equipment' => 'Echipament',
|
||
'any' => 'Oricare',
|
||
'reset' => 'Resetează',
|
||
'apply_filters' => 'Aplică filtrele',
|
||
'showing' => 'Se afișează',
|
||
'exercises_noun' => 'exerciții',
|
||
'per_page' => 'Pe pagină',
|
||
'none_found' => 'Nu s-au găsit exerciții. Încearcă să ajustezi filtrele.',
|
||
'similar' => 'Exerciții similare',
|
||
'similar_none' => 'Nu s-au găsit exerciții similare.',
|
||
'rename' => 'Nume personalizat',
|
||
'rename_placeholder' => 'Numele tău pentru acest exercițiu',
|
||
'rename_save' => 'Salvează',
|
||
'rename_reset' => 'Resetează',
|
||
'renamed_success' => 'Numele personalizat a fost salvat.',
|
||
'rename_cleared' => 'Numele personalizat a fost eliminat.',
|
||
'personal_best' => 'Recordul tău personal',
|
||
'no_personal_best' => 'Niciun set finalizat înregistrat încă. Înregistrează greutatea și repetările când bifezi un set într-o sesiune.',
|
||
],
|
||
|
||
'sessions' => [
|
||
'start' => 'Începe sesiunea',
|
||
'back_to_workout' => 'Înapoi la antrenament',
|
||
'progress' => 'Progres',
|
||
'mark_complete' => 'Marchează ca finalizată',
|
||
'mark_complete_confirm' => 'Marchezi această sesiune ca finalizată?',
|
||
'no_items' => 'Nu există exerciții în acest antrenament.',
|
||
'sets' => 'seturi',
|
||
'reps' => 'repetări',
|
||
'rest' => 'pauză',
|
||
'completed' => 'Sesiune de antrenament finalizată! Bravo!',
|
||
'exercise_timer' => 'Cronometru exercițiu',
|
||
'start_timer' => 'Start',
|
||
'stop_timer' => 'Stop',
|
||
'rest_timer' => 'Cronometru pauză',
|
||
'start_rest' => 'Start',
|
||
'pause_rest' => 'Pauză',
|
||
'reset_rest' => 'Reset',
|
||
'weight_lifted' => 'Greutate',
|
||
'reps_done' => 'Repetări',
|
||
],
|
||
|
||
'dashboard' => [
|
||
'title' => 'Tabloul tău de bord',
|
||
'subtitle' => 'Vezi pe scurt antrenamentele și progresul tău.',
|
||
'metrics' => [
|
||
'workouts' => 'Antrenamente',
|
||
'sessions' => 'Sesiuni',
|
||
'completed' => 'Finalizate',
|
||
'completion_rate' => 'Rată de finalizare',
|
||
'streak' => 'Serie curentă',
|
||
],
|
||
'days' => 'zile',
|
||
'best_streak' => 'Record',
|
||
'badges' => 'Insigne',
|
||
'recent_sessions' => 'Sesiuni recente',
|
||
'no_sessions' => 'Încă nu există sesiuni. Începe un antrenament pentru a-ți urmări progresul.',
|
||
'completed' => 'Finalizată',
|
||
'view_session' => 'Vezi sesiunea',
|
||
'activity_30d' => 'Activitate în ultimele 30 de zile',
|
||
'activity_30d_help' => 'Număr de sesiuni pe zi (mai mult este mai bine).',
|
||
],
|
||
|
||
'weight_log' => [
|
||
'title' => 'Greutate corporală',
|
||
'change_since_first' => 'Schimbare de la prima înregistrare:',
|
||
'weight_kg' => 'Greutate (kg)',
|
||
'date' => 'Data',
|
||
'log' => 'Adaugă',
|
||
'none' => 'Nicio înregistrare încă. Adaugă prima pentru a-ți urmări evoluția.',
|
||
'saved' => 'Greutate înregistrată',
|
||
'deleted' => 'Înregistrare ștearsă',
|
||
'delete' => 'Șterge',
|
||
'confirm_delete' => 'Ștergi această înregistrare?',
|
||
],
|
||
|
||
'admin' => [
|
||
'title' => 'Panou de administrare',
|
||
'subtitle' => 'Gestionează conținutul și vezi statisticile generale ale site‑ului.',
|
||
'metrics' => [
|
||
'users' => 'Utilizatori',
|
||
'workouts' => 'Antrenamente',
|
||
'sessions' => 'Sesiuni',
|
||
'exercises' => 'Exerciții',
|
||
'yoga_poses' => 'Poziții yoga',
|
||
'posts' => 'Articole blog',
|
||
],
|
||
'recent_users' => 'Utilizatori recenți',
|
||
'recent_workouts' => 'Antrenamente recente',
|
||
'none' => 'Nimic de afișat momentan.',
|
||
'manage_workouts' => 'Gestionează antrenamentele',
|
||
],
|
||
|
||
'footer' => [
|
||
'privacy' => 'Politica de confidențialitate',
|
||
'terms' => 'Termeni și condiții',
|
||
'rights' => 'Toate drepturile rezervate.',
|
||
],
|
||
|
||
'yoga' => [
|
||
'browse' => 'Răsfoiește pozițiile de yoga',
|
||
'browse_desc' => 'Explorează pozițiile de yoga după categorie sau beneficii.',
|
||
'search' => 'Căutare',
|
||
'search_placeholder' => 'Caută după nume în engleză sau sanscrită',
|
||
'category' => 'Categorie',
|
||
'benefit' => 'Beneficiu conține',
|
||
'benefit_placeholder' => 'ex: stres, digestie',
|
||
'any' => 'Oricare',
|
||
'reset' => 'Resetează',
|
||
'apply_filters' => 'Aplică filtrele',
|
||
'showing' => 'Se afișează',
|
||
'poses_noun' => 'poziții',
|
||
'none_found' => 'Nu s-au găsit poziții. Încearcă să ajustezi filtrele.',
|
||
'no_image' => 'Fără imagine',
|
||
'back' => 'Înapoi',
|
||
'description' => 'Descriere',
|
||
'no_description' => 'Nu există descriere disponibilă.',
|
||
'benefits' => 'Beneficii',
|
||
'no_benefits' => 'Nu există beneficii documentate.',
|
||
'pose_info' => 'Informații despre poziție',
|
||
'translation' => 'Traducere',
|
||
'sanskrit' => 'Sanscrită',
|
||
'sanskrit_adapted' => 'Sanscrită (adaptată)',
|
||
'browse_all' => 'Vezi toate pozițiile',
|
||
'similar' => 'Poziții similare',
|
||
'similar_none' => 'Nu s-au găsit poziții similare.',
|
||
],
|
||
|
||
'auth' => [
|
||
'register' => [
|
||
'age' => 'Vârstă',
|
||
'weight_kg' => 'Greutate (kg)',
|
||
'height_cm' => 'Înălțime (cm)',
|
||
'fitness_level' => 'Nivel de fitness',
|
||
'goal' => 'Obiectiv principal',
|
||
'health_notes' => 'Afectiuni de sănătate sau accidentări',
|
||
'available_equipment' => 'Echipament disponibil',
|
||
'available_equipment_ph' => 'ex: gantere, bară, kettlebell, benzi, bară de tracțiuni',
|
||
'days_per_week' => 'Zile pe săptămână',
|
||
'minutes_per_session' => 'Minute pe sesiune',
|
||
'select_optional' => 'Selectează (opțional)',
|
||
'levels' => [
|
||
'beginner' => 'Începător',
|
||
'intermediate' => 'Intermediar',
|
||
'advanced' => 'Avansat',
|
||
],
|
||
'goals' => [
|
||
'strength' => 'Forță',
|
||
'endurance' => 'Anduranță',
|
||
'weight_loss' => 'Scădere în greutate',
|
||
'hypertrophy' => 'Hipertrofie',
|
||
'mobility' => 'Mobilitate',
|
||
],
|
||
'steps' => [
|
||
'step1_title' => 'Creează-ți contul',
|
||
'step2_title' => 'Spune-ne despre profilul tău de fitness (opțional)',
|
||
'next' => 'Înainte',
|
||
'back' => 'Înapoi',
|
||
'register' => 'Înregistrare',
|
||
],
|
||
'consent_prefix' => 'Prin crearea unui cont, ești de acord cu',
|
||
'consent_and' => 'și cu',
|
||
'is_trainer' => 'Sunt antrenor',
|
||
'equipment_options' => [
|
||
'dumbbells' => 'Gantere',
|
||
'barbell' => 'Bară',
|
||
'kettlebell' => 'Kettlebell',
|
||
'bands' => 'Benzi elastice',
|
||
'pullup_bar' => 'Bară de tracțiuni',
|
||
'bench' => 'Bancă',
|
||
'machines' => 'Aparate',
|
||
'yoga_mat' => 'Saltea de yoga',
|
||
'treadmill' => 'Banda de alergare',
|
||
'bodyweight' => 'Doar greutatea corpului',
|
||
],
|
||
],
|
||
],
|
||
];
|