Files
fitness/lang/en/app.php
T
rootandClaude Sonnet 5 e8173ff90a Build out the trainer role
is_trainer was captured at signup and stored, but nothing in the app
used it - no client roster, no way to assign anything, a dead flag that
misled users who checked it during registration.

Adds a trainer/client link (a trainer adds a client by the email they
registered with) and lets a trainer create workouts directly on a
client's account (assigned_by_trainer_id on workouts). Deliberately
scoped for privacy: a trainer only ever sees/manages the workouts they
authored and assigned - not a client's other private data (their own
workouts, weight log, health notes, session/completion history). That
boundary needs a consent or notification system to relax safely, which
doesn't exist yet, so it's left for a follow-up rather than building it
half-safe.

WorkoutController's authorization now distinguishes "manage" (owner or
assigning trainer - view, add/edit exercises) from "own" (owner only -
delete), so a trainer can build out an assigned workout's exercises
after creating it, but can't delete a client's workout out from under
them.

Found a real bug via live testing before committing: the client roster
page eager-loaded `assignedWorkouts` (keyed by assigned_by_trainer_id)
on each client record, which is the trainer's own perspective, not the
client's - so it silently showed "no workouts assigned" even after
assigning one. Fixed to eager-load `workouts` filtered by
assigned_by_trainer_id instead, with a regression test.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 12:28:23 +03:00

355 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
return [
'nav' => [
'exercises' => 'Exercises',
'yoga' => 'Yoga',
'workouts' => 'Workouts',
'blog' => 'Blog',
'build_workout' => 'Build a Workout',
'dashboard' => 'Dashboard',
'programs' => 'Programs',
'clients' => 'Clients',
'admin' => 'Admin',
'profile' => 'Profile',
'logout' => 'Log Out',
'login' => 'Log in',
'register' => 'Sign up',
'enable_dark' => 'Enable Dark Mode',
'disable_dark' => 'Disable Dark Mode',
'language' => 'Language',
'english' => 'English',
'romanian' => 'Romanian',
],
'home' => [
'badge' => 'New • Explore 1,000+ moves',
'title' => 'Discover 1,000+ Exercises. Build Your Perfect Workout.',
'subtitle' => 'Explore FitAtlas to find exercises by muscle group and equipment, then craft routines that match your goals.',
'search_placeholder' => 'Search exercises (e.g. push up, dumbbell, back)',
'search' => 'Search',
'filters' => [
'arms' => 'Arms',
'chest' => 'Chest',
'legs' => 'Legs',
'core' => 'Core',
'back' => 'Back',
],
'featured' => 'Featured Exercises',
'browse_all' => 'Browse all',
'favorites' => 'Favorites',
'favorites_desc' => 'A balanced routine targeting all major muscle groups. Suitable for most levels and easy to adapt with available equipment.',
'try_routine' => 'Try This Routine',
'features' => [
'title' => 'Everything you need to train smarter',
'subtitle' => 'Powerful tools to plan workouts, learn movements, and track your progress — all in one place.',
'items' => [
'tracking' => [
'title' => 'Session tracking',
'desc' => 'Check off exercises as you go and mark sessions complete to visualize consistency.',
],
'library' => [
'title' => 'Rich exercise library',
'desc' => 'Browse 1,000+ movements with target muscles, equipment, and clear instructions.',
],
'plans' => [
'title' => 'Custom workouts',
'desc' => 'Build routines that match your goals and available equipment.',
],
'yoga' => [
'title' => 'Yoga poses',
'desc' => 'Search and learn yoga poses by category and benefits with images.',
],
'progress' => [
'title' => 'Progress dashboard',
'desc' => 'See completion rate, recent sessions, and 30‑day activity at a glance.',
],
'community' => [
'title' => 'Personalized',
'desc' => 'Rename exercises for yourself and favorite the ones you use the most.',
],
],
],
'pricing' => [
'title' => 'Simple pricing',
'subtitle' => 'Start free. Upgrade anytime for more features.',
'cta' => 'Get started',
'plans' => [
'free' => [
'name' => 'Free',
'price' => '$0',
'period' => '/ forever',
'desc' => 'Everything you need to begin.',
'features' => [
'feature1' => 'Exercise search and filters',
'feature2' => 'Build and manage workouts',
'feature3' => 'Yoga poses browser',
'feature4' => 'Basic dashboard stats',
],
],
'pro' => [
'name' => 'Pro',
'price' => '$9',
'period' => '/ month',
'desc' => 'Deeper insights and personalization.',
'features' => [
'feature1' => 'Advanced progress analytics',
'feature2' => 'Unlimited favorites and aliases',
'feature3' => 'Priority data updates',
'feature4' => 'Early access features',
'feature5' => 'Email support',
],
],
'ultimate' => [
'name' => 'Ultimate',
'price' => '$19',
'period' => '/ month',
'desc' => 'For power users and enthusiasts.',
'features' => [
'feature1' => 'Everything in Pro',
'feature2' => 'Customization extras',
'feature3' => 'Priority support',
],
],
],
],
'faq' => [
'title' => 'Frequently asked questions',
'subtitle' => 'If you can’t find what you’re looking for, reach out and we’ll help.',
'q1' => 'Is FitAtlas free to use?',
'a1' => 'Yes. You can browse exercises, create workouts, and track sessions for free.',
'q2' => 'What is the Dashboard?',
'a2' => 'Your personal hub with stats like completion rate, recent sessions, and activity over the last 30 days.',
'q3' => 'Do you support yoga?',
'a3' => 'Yes. Browse yoga categories and poses, filter by benefits, and open detailed pages.',
'q4' => 'Can I rename exercises?',
'a4' => 'Yes. You can set custom names visible only to you on each exercise page.',
'q5' => 'Will there be a Pro plan?',
'a5' => 'Pricing is indicative. You can start free and upgrade later if you need more features.',
'q6' => 'What languages are supported?',
'a6' => 'English and Romanian. Switch with the language control in the header.',
],
],
'workouts' => [
'my_workouts' => 'My Workouts',
'manage_desc' => 'Create routines and manage your exercises.',
'new_workout' => 'New Workout',
'none_yet' => 'No workouts yet. Create your first workout.',
'open' => 'Open',
'delete' => 'Delete',
'confirm_delete' => 'Delete this workout?',
'create_title' => 'Create Workout',
'create_desc' => 'Give your workout a name and optional details.',
'title_label' => 'Title',
'estimated_minutes' => 'Estimated Minutes',
'notes' => 'Notes',
'cancel' => 'Cancel',
'create_submit' => 'Create Workout',
'back_to_workouts' => '← Back to Workouts',
'favorited' => 'Favorited',
'favorite' => 'Favorite',
'min' => 'min',
'exercises_count' => 'exercises',
'exercises' => 'Exercises',
'no_exercises_yet' => 'No exercises yet. Add your first one on the right.',
'remove_exercise_confirm' => 'Remove this exercise?',
'remove' => 'Remove',
'edit' => 'Edit',
'position_ph' => 'Position',
'sets' => 'Sets',
'reps' => 'Reps',
'weight' => 'Weight (kg)',
'rest' => 'Rest (s)',
'save' => 'Save',
'add_exercise' => 'Add Exercise',
'exercise_label' => 'Exercise',
'add_exercise_submit' => 'Add Exercise',
'rest_suffix' => 's rest',
'kg' => 'kg',
],
'exercises' => [
'browse' => 'Browse Exercises',
'browse_desc' => 'Explore the full FitAtlas library. Filter by body part, muscle, or equipment.',
'search' => 'Search',
'search_placeholder' => 'Search by name or instruction',
'body_part' => 'Body Part',
'muscle' => 'Muscle',
'equipment' => 'Equipment',
'any' => 'Any',
'reset' => 'Reset',
'apply_filters' => 'Apply Filters',
'showing' => 'Showing',
'exercises_noun' => 'exercises',
'per_page' => 'Per page',
'none_found' => 'No exercises found. Try adjusting your filters.',
'similar' => 'Similar exercises',
'similar_none' => 'No similar exercises found.',
'rename' => 'Custom name',
'rename_placeholder' => 'Your custom name for this exercise',
'rename_save' => 'Save',
'rename_reset' => 'Reset',
'renamed_success' => 'Your custom name has been saved.',
'rename_cleared' => 'Custom name cleared.',
'personal_best' => 'Your Personal Best',
'no_personal_best' => 'No completed sets logged yet. Track weight and reps when you check off a set in a session.',
],
'sessions' => [
'start' => 'Start Session',
'back_to_workout' => 'Back to workout',
'progress' => 'Progress',
'mark_complete' => 'Mark as complete',
'mark_complete_confirm' => 'Mark this session as complete?',
'no_items' => 'No exercises in this workout.',
'sets' => 'sets',
'reps' => 'reps',
'rest' => 'rest',
'completed' => 'Workout session completed! Great job!',
'exercise_timer' => 'Exercise timer',
'start_timer' => 'Start',
'stop_timer' => 'Stop',
'rest_timer' => 'Rest timer',
'start_rest' => 'Start',
'pause_rest' => 'Pause',
'reset_rest' => 'Reset',
'weight_lifted' => 'Weight',
'reps_done' => 'Reps',
],
'dashboard' => [
'title' => 'Your Dashboard',
'subtitle' => 'See your workouts and training progress at a glance.',
'metrics' => [
'workouts' => 'Workouts',
'sessions' => 'Sessions',
'completed' => 'Completed',
'completion_rate' => 'Completion rate',
],
'recent_sessions' => 'Recent Sessions',
'no_sessions' => 'No sessions yet. Start a workout to track your progress.',
'completed' => 'Completed',
'view_session' => 'View session',
'activity_30d' => 'Last 30 Days Activity',
'activity_30d_help' => 'Number of sessions per day (higher is better).',
],
'weight_log' => [
'title' => 'Body Weight',
'change_since_first' => 'Change since your first entry:',
'weight_kg' => 'Weight (kg)',
'date' => 'Date',
'log' => 'Log',
'none' => 'No weight entries yet. Log your first one to start tracking your trend.',
'saved' => 'Weight logged',
'deleted' => 'Entry deleted',
'delete' => 'Delete',
'confirm_delete' => 'Delete this entry?',
],
'admin' => [
'title' => 'Admin Dashboard',
'subtitle' => 'Manage content and see overall site statistics.',
'metrics' => [
'users' => 'Users',
'workouts' => 'Workouts',
'sessions' => 'Sessions',
'exercises' => 'Exercises',
'yoga_poses' => 'Yoga poses',
'posts' => 'Blog posts',
],
'recent_users' => 'Recent users',
'recent_workouts' => 'Recent workouts',
'none' => 'Nothing to show yet.',
'manage_workouts' => 'Manage workouts',
],
'footer' => [
'privacy' => 'Privacy Policy',
'terms' => 'Terms of Service',
'rights' => 'All rights reserved.',
],
'yoga' => [
'browse' => 'Browse Yoga Poses',
'browse_desc' => 'Explore yoga poses by category or benefits.',
'search' => 'Search',
'search_placeholder' => 'Search by English or Sanskrit name',
'category' => 'Category',
'benefit' => 'Benefit contains',
'benefit_placeholder' => 'e.g. stress, digestion',
'any' => 'Any',
'reset' => 'Reset',
'apply_filters' => 'Apply Filters',
'showing' => 'Showing',
'poses_noun' => 'poses',
'none_found' => 'No poses found. Try adjusting your filters.',
'no_image' => 'No image',
'back' => 'Back',
'description' => 'Description',
'no_description' => 'No description available.',
'benefits' => 'Benefits',
'no_benefits' => 'No documented benefits.',
'pose_info' => 'Pose Info',
'translation' => 'Translation',
'sanskrit' => 'Sanskrit',
'sanskrit_adapted' => 'Sanskrit (adapted)',
'browse_all' => 'Browse all poses',
'similar' => 'Similar poses',
'similar_none' => 'No similar poses found.',
],
'auth' => [
'register' => [
'age' => 'Age',
'weight_kg' => 'Weight (kg)',
'height_cm' => 'Height (cm)',
'fitness_level' => 'Fitness level',
'goal' => 'Primary goal',
'health_notes' => 'Health conditions or injuries',
'available_equipment' => 'Available equipment',
'available_equipment_ph' => 'e.g. dumbbells, barbell, kettlebell, bands, pull-up bar',
'days_per_week' => 'Days per week',
'minutes_per_session' => 'Minutes per session',
'select_optional' => 'Select (optional)',
'levels' => [
'beginner' => 'Beginner',
'intermediate' => 'Intermediate',
'advanced' => 'Advanced',
],
'goals' => [
'strength' => 'Strength',
'endurance' => 'Endurance',
'weight_loss' => 'Weight loss',
'hypertrophy' => 'Hypertrophy',
'mobility' => 'Mobility',
],
'steps' => [
'step1_title' => 'Create your account',
'step2_title' => 'Tell us about your fitness profile (optional)',
'next' => 'Next',
'back' => 'Back',
'register' => 'Register',
],
'consent_prefix' => 'By creating an account, you agree to our',
'consent_and' => 'and',
'is_trainer' => 'I am a trainer',
'equipment_options' => [
'dumbbells' => 'Dumbbells',
'barbell' => 'Barbell',
'kettlebell' => 'Kettlebell',
'bands' => 'Resistance bands',
'pullup_bar' => 'Pull-up bar',
'bench' => 'Bench',
'machines' => 'Gym machines',
'yoga_mat' => 'Yoga mat',
'treadmill' => 'Treadmill',
'bodyweight' => 'Bodyweight only',
],
],
],
];