diff --git a/src/shared/data/useTranslatedData.ts b/src/shared/data/useTranslatedData.ts new file mode 100644 index 0000000..06c532e --- /dev/null +++ b/src/shared/data/useTranslatedData.ts @@ -0,0 +1,123 @@ +/** + * TabataFit Translated Data Hooks + * Wraps raw data objects with t() lookups at render time + */ + +import { useMemo } from 'react' +import { useTranslation } from 'react-i18next' +import type { Workout, Collection, Program } from '../types' +import { CATEGORIES } from './index' + +/** Convert an exercise/equipment name to a slug key for i18n lookup */ +function slugify(name: string): string { + return name + .toLowerCase() + .replace(/[()]/g, '') + .replace(/&/g, 'and') + .replace(/[^a-z0-9]+/g, '-') + .replace(/(^-|-$)/g, '') +} + +/** Translate a single workout's display strings */ +export function useTranslatedWorkout(workout: Workout | undefined) { + const { t } = useTranslation('content') + + return useMemo(() => { + if (!workout) return undefined + return { + ...workout, + title: t(`workouts.${workout.id}`, { defaultValue: workout.title }), + exercises: workout.exercises.map((ex) => ({ + ...ex, + name: t(`exercises.${slugify(ex.name)}`, { defaultValue: ex.name }), + })), + equipment: workout.equipment.map((item) => + t(`equipment.${slugify(item)}`, { defaultValue: item }) + ), + } + }, [workout, t]) +} + +/** Translate an array of workouts (titles only, for list views) */ +export function useTranslatedWorkouts( + workouts: T[] +) { + const { t } = useTranslation('content') + + return useMemo( + () => + workouts.map((w) => ({ + ...w, + title: t(`workouts.${w.id}`, { defaultValue: w.title }), + })), + [workouts, t] + ) +} + +/** Translate collections */ +export function useTranslatedCollections(collections: Collection[]) { + const { t } = useTranslation('content') + + return useMemo( + () => + collections.map((c) => ({ + ...c, + title: t(`collections.${c.id}.title`, { defaultValue: c.title }), + description: t(`collections.${c.id}.description`, { + defaultValue: c.description, + }), + })), + [collections, t] + ) +} + +/** Translate programs */ +export function useTranslatedPrograms(programs: Program[]) { + const { t } = useTranslation('content') + + return useMemo( + () => + programs.map((p) => ({ + ...p, + title: t(`programs.${p.id}.title`, { defaultValue: p.title }), + description: t(`programs.${p.id}.description`, { + defaultValue: p.description, + }), + })), + [programs, t] + ) +} + +/** Translate category labels */ +export function useTranslatedCategories() { + const { t } = useTranslation('common') + + return useMemo(() => { + const categoryKeyMap: Record = { + all: 'categories.all', + 'full-body': 'categories.fullBody', + core: 'categories.core', + 'upper-body': 'categories.upperBody', + 'lower-body': 'categories.lowerBody', + cardio: 'categories.cardio', + } + + return CATEGORIES.map((cat) => ({ + ...cat, + label: t(categoryKeyMap[cat.id] ?? cat.id, { defaultValue: cat.label }), + })) + }, [t]) +} + +/** Translate a music vibe name */ +export function useMusicVibeLabel(vibe: string): string { + const { t } = useTranslation('common') + const vibeKeyMap: Record = { + electronic: 'musicVibes.electronic', + 'hip-hop': 'musicVibes.hipHop', + pop: 'musicVibes.pop', + rock: 'musicVibes.rock', + chill: 'musicVibes.chill', + } + return t(vibeKeyMap[vibe] ?? vibe, { defaultValue: vibe }) +} diff --git a/src/shared/i18n/index.ts b/src/shared/i18n/index.ts new file mode 100644 index 0000000..d9286ad --- /dev/null +++ b/src/shared/i18n/index.ts @@ -0,0 +1,76 @@ +/** + * TabataFit i18n Setup + * expo-localization + i18next + react-i18next + * Auto-detects device locale, falls back to English + */ + +import i18n from 'i18next' +import { initReactI18next } from 'react-i18next' +import { getLocales } from 'expo-localization' + +// EN +import enCommon from './locales/en/common.json' +import enScreens from './locales/en/screens.json' +import enContent from './locales/en/content.json' +import enNotifications from './locales/en/notifications.json' + +// FR +import frCommon from './locales/fr/common.json' +import frScreens from './locales/fr/screens.json' +import frContent from './locales/fr/content.json' +import frNotifications from './locales/fr/notifications.json' + +// ES +import esCommon from './locales/es/common.json' +import esScreens from './locales/es/screens.json' +import esContent from './locales/es/content.json' +import esNotifications from './locales/es/notifications.json' + +// DE +import deCommon from './locales/de/common.json' +import deScreens from './locales/de/screens.json' +import deContent from './locales/de/content.json' +import deNotifications from './locales/de/notifications.json' + +const deviceLanguage = getLocales()[0]?.languageCode ?? 'en' + +i18n + .use(initReactI18next) + .init({ + compatibilityJSON: 'v4', + lng: deviceLanguage, + fallbackLng: 'en', + ns: ['common', 'screens', 'content', 'notifications'], + defaultNS: 'common', + resources: { + en: { + common: enCommon, + screens: enScreens, + content: enContent, + notifications: enNotifications, + }, + fr: { + common: frCommon, + screens: frScreens, + content: frContent, + notifications: frNotifications, + }, + es: { + common: esCommon, + screens: esScreens, + content: esContent, + notifications: esNotifications, + }, + de: { + common: deCommon, + screens: deScreens, + content: deContent, + notifications: deNotifications, + }, + }, + interpolation: { + escapeValue: false, + }, + }) + +export default i18n diff --git a/src/shared/i18n/locales/de/CLAUDE.md b/src/shared/i18n/locales/de/CLAUDE.md new file mode 100644 index 0000000..ab70ec0 --- /dev/null +++ b/src/shared/i18n/locales/de/CLAUDE.md @@ -0,0 +1,14 @@ + +# Recent Activity + + + +### Feb 20, 2026 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 | +| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 | +| #5374 | 7:54 PM | 🟣 | German Localization Added for Paywall Restore Purchases | ~184 | +| #5373 | " | 🟣 | German Localization Added for Profile Subscription Section | ~163 | + \ No newline at end of file diff --git a/src/shared/i18n/locales/de/common.json b/src/shared/i18n/locales/de/common.json new file mode 100644 index 0000000..592c015 --- /dev/null +++ b/src/shared/i18n/locales/de/common.json @@ -0,0 +1,76 @@ +{ + "start": "START", + "continue": "Weiter", + "next": "Weiter", + "done": "Fertig", + "seeAll": "Alle anzeigen", + "back": "Zurück", + "share": "Teilen", + "cancel": "Abbrechen", + "save": "Speichern", + + "levels": { + "beginner": "Anfänger", + "intermediate": "Fortgeschritten", + "advanced": "Profi" + }, + + "categories": { + "all": "Alle", + "fullBody": "Ganzkörper", + "core": "Core", + "upperBody": "Oberkörper", + "lowerBody": "Unterkörper", + "cardio": "Cardio" + }, + + "days": { + "sun": "So", + "mon": "Mo", + "tue": "Di", + "wed": "Mi", + "thu": "Do", + "fri": "Fr", + "sat": "Sa" + }, + + "greetings": { + "morning": "Guten Morgen", + "afternoon": "Guten Tag", + "evening": "Guten Abend" + }, + + "units": { + "min": "Min", + "cal": "kcal", + "minUnit": "{{count}} Min", + "calUnit": "{{count}} kcal", + "sWork": "{{count}}s Arbeit", + "perYear": "pro Jahr", + "perMonth": "pro Monat", + "perWeek": "/Woche" + }, + + "plurals": { + "workout_one": "{{count}} Workout", + "workout_other": "{{count}} Workouts", + "day_one": "{{count}} Tag", + "day_other": "{{count}} Tage", + "round_one": "{{count}} Runde", + "round_other": "{{count}} Runden", + "week_one": "{{count}} Woche", + "week_other": "{{count}} Wochen" + }, + + "workoutMeta": "{{duration}} Min \u00B7 {{level}} \u00B7 {{calories}} kcal", + "durationLevel": "{{duration}} Min \u00B7 {{level}}", + "calMin": "{{calories}} kcal \u00B7 {{duration}} Min", + + "musicVibes": { + "electronic": "Electronic", + "hipHop": "Hip-Hop", + "pop": "Pop", + "rock": "Rock", + "chill": "Chill" + } +} diff --git a/src/shared/i18n/locales/de/content.json b/src/shared/i18n/locales/de/content.json new file mode 100644 index 0000000..06094e5 --- /dev/null +++ b/src/shared/i18n/locales/de/content.json @@ -0,0 +1,310 @@ +{ + "workouts": { + "1": "Ganzkörper Ignite", + "2": "Total Body Blast", + "3": "Power Surge", + "4": "Morgen-Weckruf", + "5": "Ausdauer-Aufbau", + "6": "Schneller Burn", + "7": "Funktioneller Flow", + "8": "Athletische Power", + "9": "Schweiß-Session", + "10": "Total Tone", + "11": "Core Crusher", + "12": "Bauch-Shredder", + "13": "Core Grundlagen", + "14": "Schräge-Inferno", + "15": "Core Ausdauer", + "16": "Sanftes Core", + "17": "Core Power", + "18": "360 Core", + "19": "Core Stabilität", + "20": "Core Marathon", + "21": "Oberkörper Blitz", + "22": "Arm-Sculptor", + "23": "Liegestütz-Meisterung", + "24": "Schulter-Shredder", + "25": "Brust & Rücken", + "26": "Eigengewicht Oberkörper", + "27": "Kraft Tabata", + "28": "Straffen & Definieren", + "29": "Power-Arme", + "30": "Oberkörper Ausdauer", + "31": "Unterkörper Burn", + "32": "Beintag Tabata", + "33": "Gesäß-Aktivierung", + "34": "Explosive Beine", + "35": "Kniebeugen Challenge", + "36": "Unterkörper Power", + "37": "Knieschonende Beine", + "38": "Sprint Tabata", + "39": "Beine & Po", + "40": "Beintag Marathon", + "41": "HIIT Extrem", + "42": "Cardio Blast", + "43": "Dance Cardio", + "44": "Fettverbrennung Express", + "45": "Low Impact Cardio", + "46": "Cardio Inferno", + "47": "Sonnenaufgang Flow", + "48": "Power Hour", + "49": "Tiefe Dehnung", + "50": "Cardio Marathon" + }, + "exercises": { + "jumping-jacks": "Hampelmänner", + "squats": "Kniebeugen", + "push-ups": "Liegestütze", + "high-knees": "Kniehebelauf", + "burpees": "Burpees", + "lunges": "Ausfallschritte", + "push-up-to-row": "Liegestütz mit Rudern", + "mountain-climbers": "Bergsteiger", + "thrusters": "Thrusters", + "box-jumps": "Box Jumps", + "renegade-rows": "Renegade Rows", + "tuck-jumps": "Hocksprünge", + "arm-circles": "Armkreisen", + "bodyweight-squats": "Kniebeugen", + "knee-push-ups": "Knie-Liegestütze", + "marching-in-place": "Marschieren auf der Stelle", + "devil-press": "Devil Press", + "squat-jumps": "Sprung-Kniebeugen", + "push-up-burpees": "Liegestütz-Burpees", + "plank-jacks": "Plank Jacks", + "star-jumps": "Sternsprünge", + "wall-sit": "Wandsitzen", + "tricep-dips": "Trizeps-Dips", + "butt-kicks": "Anfersen", + "inchworms": "Inchworms", + "curtsy-lunges": "Knicks-Ausfallschritte", + "bear-crawls": "Bärenkrabbeln", + "squat-pulses": "Kniebeugen-Pulse", + "clean-and-press": "Clean & Press", + "lateral-bounds": "Seitsprünge", + "slam-ball": "Slam Ball", + "sprawls": "Sprawls", + "jumping-lunges": "Sprung-Ausfallschritte", + "push-up-to-t": "Liegestütz zum T", + "speed-skaters": "Speed Skaters", + "plank-shoulder-taps": "Plank Schultertippen", + "side-lunges": "Seitliche Ausfallschritte", + "diamond-push-ups": "Diamant-Liegestütze", + "glute-bridges": "Gesäßbrücke", + "toe-touches": "Zehenberührungen", + "crunches": "Crunches", + "russian-twists": "Russian Twists", + "leg-raises": "Beinheben", + "plank-hold": "Plank halten", + "v-ups": "V-Ups", + "bicycle-crunches": "Fahrrad-Crunches", + "dragon-flags": "Dragon Flags", + "flutter-kicks": "Flatterkicks", + "dead-bug": "Dead Bug", + "bird-dog": "Bird Dog", + "side-plank-l": "Seitplank (L)", + "side-plank-r": "Seitplank (R)", + "woodchoppers": "Holzhacker", + "side-crunches": "Seitliche Crunches", + "windshield-wipers": "Scheibenwischer", + "plank-hip-dips": "Plank Hüftsenken", + "hollow-body-hold": "Hollow Body Hold", + "turkish-get-ups": "Turkish Get-ups", + "ab-rollouts": "Bauchrad-Rollouts", + "pallof-press": "Pallof Press", + "pelvic-tilts": "Beckenkippen", + "modified-crunches": "Modifizierte Crunches", + "supine-leg-march": "Rückenlage Beinmarsch", + "cat-cow": "Katze-Kuh", + "plank-to-push-up": "Plank zu Liegestütz", + "reverse-crunches": "Umgekehrte Crunches", + "bear-hold": "Bärenhalten", + "l-sits": "L-Sits", + "dragon-flag-negatives": "Dragon Flag Negatives", + "hanging-knee-raises": "Hängendes Knieheben", + "plank-walkouts": "Plank Walkouts", + "forearm-plank": "Unterarm-Plank", + "slow-bicycle": "Langsamer Fahrrad-Crunch", + "glute-bridge-march": "Gesäßbrücke Marsch", + "prone-cobra": "Bauchlage Kobra", + "stir-the-pot": "Topfrühren", + "ab-wheel-rollout": "Bauchrad-Rollout", + "hanging-leg-raises": "Hängendes Beinheben", + "dumbbell-rows": "Kurzhantel-Rudern", + "shoulder-press": "Schulterdrücken", + "bicep-curls": "Bizeps-Curls", + "tricep-extensions": "Trizeps-Streckung", + "lateral-raises": "Seitheben", + "front-raises": "Frontheben", + "wide-push-ups": "Breite Liegestütze", + "decline-push-ups": "Decline Liegestütze", + "explosive-push-ups": "Explosive Liegestütze", + "arnold-press": "Arnold Press", + "upright-rows": "Aufrechtes Rudern", + "face-pulls": "Face Pulls", + "handstand-hold": "Handstand halten", + "chest-press": "Brustpresse", + "bent-over-rows": "Vorgebeugtes Rudern", + "chest-flyes": "Brustfliegen", + "pull-ups": "Klimmzüge", + "tricep-dips-chair": "Trizeps-Dips (Stuhl)", + "clean-and-jerk": "Clean & Jerk", + "turkish-get-up": "Turkish Get-up", + "overhead-press": "Überkopfdrücken", + "hammer-curls": "Hammer-Curls", + "overhead-tricep": "Überkopf Trizeps", + "reverse-flyes": "Reverse Flyes", + "concentration-curls": "Konzentrations-Curls", + "skull-crushers": "Skull Crushers", + "zottman-curls": "Zottman Curls", + "dips": "Dips", + "barbell-press": "Langhantel-Drücken", + "dumbbell-snatch": "Kurzhantel-Reißen", + "plyo-push-ups": "Plyo Liegestütze", + "calf-raises": "Wadenheben", + "jump-squats": "Sprung-Kniebeugen", + "walking-lunges": "Geh-Ausfallschritte", + "step-ups": "Step-ups", + "donkey-kicks": "Donkey Kicks", + "fire-hydrants": "Fire Hydrants", + "clamshells": "Clamshells", + "pistol-squats": "Pistol Squats", + "broad-jumps": "Weitsprünge", + "goblet-squats": "Goblet Squats", + "sumo-squats": "Sumo-Kniebeugen", + "pulse-squats": "Puls-Kniebeugen", + "front-squats": "Front-Kniebeugen", + "romanian-deadlifts": "Rumänisches Kreuzheben", + "split-squats": "Split Squats", + "power-cleans": "Power Cleans", + "standing-kickbacks": "Stehende Kickbacks", + "side-leg-raises": "Seitliches Beinheben", + "high-knees-sprint": "Kniehebelauf Sprint", + "lateral-shuffles": "Seitliches Shuffeln", + "butt-kick-sprint": "Anfersen Sprint", + "banded-squats": "Kniebeugen mit Band", + "hip-thrusts": "Hip Thrusts", + "lateral-band-walks": "Seitliches Bandgehen", + "step-back-lunges": "Rückwärts-Ausfallschritte", + "back-squats": "Back Squats", + "leg-press-jumps": "Beinpressen-Sprünge", + "box-jump-overs": "Box Jump Overs", + "grapevine": "Grapevine", + "step-touch": "Step Touch", + "cha-cha-slide": "Cha-Cha Slide", + "jump-rope": "Seilspringen", + "step-touches": "Step Touches", + "boxing-punches": "Box-Schläge", + "side-steps": "Seitschritte", + "burpee-tuck-jumps": "Burpee Hocksprünge", + "sprint-in-place": "Sprint auf der Stelle", + "plyo-lunges": "Plyo Ausfallschritte", + "sun-salutation": "Sonnengruß", + "light-jog": "Leichtes Joggen", + "arm-swings": "Armschwingen", + "gentle-twists": "Sanfte Drehungen", + "double-unders": "Double Unders", + "box-jump-burpees": "Box Jump Burpees", + "sprint-intervals": "Sprint-Intervalle", + "forward-fold": "Vorbeuge", + "pigeon-pose": "Taube", + "spinal-twist": "Wirbelsäulendrehung", + "butterfly-stretch": "Schmetterlingsdehnung" + }, + "equipment": { + "no-equipment-required": "Kein Equipment nötig", + "yoga-mat-optional": "Yogamatte optional", + "yoga-mat": "Yogamatte", + "dumbbells-optional": "Kurzhanteln optional", + "dumbbells": "Kurzhanteln", + "kettlebell-recommended": "Kettlebell empfohlen", + "kettlebell": "Kettlebell", + "resistance-band-optional": "Widerstandsband optional", + "resistance-band": "Widerstandsband", + "medicine-ball": "Medizinball", + "light-dumbbells": "Leichte Kurzhanteln", + "pull-up-bar": "Klimmzugstange", + "full-gym-setup": "Voll ausgestattetes Fitnessstudio", + "box-or-step": "Box oder Stufe", + "chair-for-balance": "Stuhl für Balance", + "jump-rope-optional": "Springseil optional", + "jump-rope": "Springseil", + "stability-ball": "Gymnastikball", + "barbell": "Langhantel", + "dumbbell-optional": "Kurzhantel optional" + }, + "collections": { + "morning-energizer": { + "title": "Morgen-Energie", + "description": "Starte richtig in den Tag" + }, + "no-equipment": { + "title": "Ohne Equipment", + "description": "Trainiere überall" + }, + "7-day-burn": { + "title": "7-Tage Burn Challenge", + "description": "Verwandlung in einer Woche" + }, + "quick-intense": { + "title": "Kurz & Intensiv", + "description": "Maximale Anstrengung in 4 Minuten" + }, + "core-focus": { + "title": "Core-Fokus", + "description": "Baue ein solides Fundament" + }, + "leg-day": { + "title": "Beintag", + "description": "Überspringe nie den Beintag" + } + }, + "programs": { + "beginner-journey": { + "title": "Einsteiger-Reise", + "description": "Deine ersten Schritte in die Tabata-Fitness" + }, + "strength-builder": { + "title": "Kraft-Aufbau", + "description": "Progressiver Kraftaufbau" + }, + "fat-burn-protocol": { + "title": "Fettverbrennungs-Protokoll", + "description": "Maximales Kalorienverbrennungsprogramm" + } + }, + "achievements": { + "first-burn": { + "title": "Erster Burn", + "description": "Schließe dein erstes Workout ab" + }, + "week-warrior": { + "title": "Wochen-Krieger", + "description": "7 Tage in Folge" + }, + "century-club": { + "title": "Century Club", + "description": "Verbrenne insgesamt 100 Kalorien" + }, + "iron-will": { + "title": "Eiserner Wille", + "description": "Schließe 10 Workouts ab" + }, + "tabata-master": { + "title": "Tabata-Meister", + "description": "Schließe 50 Workouts ab" + }, + "marathon-burner": { + "title": "Marathon-Burner", + "description": "Trainiere insgesamt 100 Minuten" + }, + "unstoppable": { + "title": "Unaufhaltbar", + "description": "30 Tage in Folge" + }, + "calorie-crusher": { + "title": "Kalorien-Crusher", + "description": "Verbrenne insgesamt 1000 Kalorien" + } + } +} diff --git a/src/shared/i18n/locales/de/notifications.json b/src/shared/i18n/locales/de/notifications.json new file mode 100644 index 0000000..cbeb2f8 --- /dev/null +++ b/src/shared/i18n/locales/de/notifications.json @@ -0,0 +1,6 @@ +{ + "dailyReminder": { + "title": "Zeit für dein Tabata!", + "body": "4 Minuten, die deinen Tag verändern." + } +} diff --git a/src/shared/i18n/locales/de/screens.json b/src/shared/i18n/locales/de/screens.json index a88966c..0f0d41c 100644 --- a/src/shared/i18n/locales/de/screens.json +++ b/src/shared/i18n/locales/de/screens.json @@ -53,10 +53,12 @@ "memberSince": "Mitglied seit {{date}}", "sectionWorkout": "WORKOUT", "sectionNotifications": "BENACHRICHTIGUNGEN", + "sectionSubscription": "ABONNEMENT", + "restorePurchases": "K\u00e4ufe wiederherstellen", "hapticFeedback": "Haptisches Feedback", "soundEffects": "Soundeffekte", "voiceCoaching": "Sprachcoaching", - "dailyReminders": "Tägliche Erinnerungen", + "dailyReminders": "T\u00e4gliche Erinnerungen", "reminderTime": "Erinnerungszeit", "version": "TabataFit v1.0.0" }, @@ -188,7 +190,8 @@ "monthlyPrice": "6,99 $", "savePercent": "42% sparen", "trialCta": "KOSTENLOS TESTEN (7 Tage)", - "guarantees": "Jederzeit kündbar \u00B7 30-Tage-Geld-zurück-Garantie", + "guarantees": "Jederzeit k\u00fcndbar \u00B7 30-Tage-Geld-zur\u00fcck-Garantie", + "restorePurchases": "K\u00e4ufe wiederherstellen", "skipButton": "Ohne Abo fortfahren" } } diff --git a/src/shared/i18n/locales/en/CLAUDE.md b/src/shared/i18n/locales/en/CLAUDE.md new file mode 100644 index 0000000..d7e2504 --- /dev/null +++ b/src/shared/i18n/locales/en/CLAUDE.md @@ -0,0 +1,14 @@ + +# Recent Activity + + + +### Feb 20, 2026 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 | +| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 | +| #5366 | 7:51 PM | 🟣 | Restore Purchases Translation Added to Paywall Section | ~153 | +| #5365 | " | 🟣 | English Localization Added for Subscription Section | ~160 | + \ No newline at end of file diff --git a/src/shared/i18n/locales/en/common.json b/src/shared/i18n/locales/en/common.json new file mode 100644 index 0000000..9eaaf08 --- /dev/null +++ b/src/shared/i18n/locales/en/common.json @@ -0,0 +1,76 @@ +{ + "start": "START", + "continue": "Continue", + "next": "Next", + "done": "Done", + "seeAll": "See All", + "back": "Back", + "share": "Share", + "cancel": "Cancel", + "save": "Save", + + "levels": { + "beginner": "Beginner", + "intermediate": "Intermediate", + "advanced": "Advanced" + }, + + "categories": { + "all": "All", + "fullBody": "Full Body", + "core": "Core", + "upperBody": "Upper Body", + "lowerBody": "Lower Body", + "cardio": "Cardio" + }, + + "days": { + "sun": "Sun", + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat" + }, + + "greetings": { + "morning": "Good morning", + "afternoon": "Good afternoon", + "evening": "Good evening" + }, + + "units": { + "min": "min", + "cal": "cal", + "minUnit": "{{count}} min", + "calUnit": "{{count}} cal", + "sWork": "{{count}}s work", + "perYear": "per year", + "perMonth": "per month", + "perWeek": "/week" + }, + + "plurals": { + "workout_one": "{{count}} workout", + "workout_other": "{{count}} workouts", + "day_one": "{{count}} day", + "day_other": "{{count}} days", + "round_one": "{{count}} round", + "round_other": "{{count}} rounds", + "week_one": "{{count}} week", + "week_other": "{{count}} weeks" + }, + + "workoutMeta": "{{duration}} min \u00B7 {{level}} \u00B7 {{calories}} cal", + "durationLevel": "{{duration}} min \u00B7 {{level}}", + "calMin": "{{calories}} cal \u00B7 {{duration}} min", + + "musicVibes": { + "electronic": "Electronic", + "hipHop": "Hip-Hop", + "pop": "Pop", + "rock": "Rock", + "chill": "Chill" + } +} diff --git a/src/shared/i18n/locales/en/content.json b/src/shared/i18n/locales/en/content.json new file mode 100644 index 0000000..5d4dadb --- /dev/null +++ b/src/shared/i18n/locales/en/content.json @@ -0,0 +1,310 @@ +{ + "workouts": { + "1": "Full Body Ignite", + "2": "Total Body Blast", + "3": "Power Surge", + "4": "Morning Wake-Up", + "5": "Endurance Builder", + "6": "Quick Burn", + "7": "Functional Flow", + "8": "Athletic Power", + "9": "Sweat Session", + "10": "Total Tone", + "11": "Core Crusher", + "12": "Ab Shredder", + "13": "Core Foundations", + "14": "Oblique Inferno", + "15": "Core Endurance", + "16": "Gentle Core", + "17": "Core Power", + "18": "360 Core", + "19": "Core Stability", + "20": "Core Marathon", + "21": "Upper Body Blitz", + "22": "Arm Sculptor", + "23": "Push-Up Mastery", + "24": "Shoulder Shredder", + "25": "Chest & Back", + "26": "Bodyweight Upper", + "27": "Strength Tabata", + "28": "Tone & Define", + "29": "Power Arms", + "30": "Upper Endurance", + "31": "Lower Body Burn", + "32": "Leg Day Tabata", + "33": "Glute Activator", + "34": "Explosive Legs", + "35": "Squat Challenge", + "36": "Lower Power", + "37": "Knee-Friendly Legs", + "38": "Sprint Tabata", + "39": "Legs & Glutes", + "40": "Leg Day Marathon", + "41": "HIIT Extreme", + "42": "Cardio Blast", + "43": "Dance Cardio", + "44": "Fat Burn Express", + "45": "Low Impact Cardio", + "46": "Cardio Inferno", + "47": "Sunrise Flow", + "48": "Power Hour", + "49": "Deep Stretch", + "50": "Cardio Marathon" + }, + "exercises": { + "jumping-jacks": "Jumping Jacks", + "squats": "Squats", + "push-ups": "Push-ups", + "high-knees": "High Knees", + "burpees": "Burpees", + "lunges": "Lunges", + "push-up-to-row": "Push-up to Row", + "mountain-climbers": "Mountain Climbers", + "thrusters": "Thrusters", + "box-jumps": "Box Jumps", + "renegade-rows": "Renegade Rows", + "tuck-jumps": "Tuck Jumps", + "arm-circles": "Arm Circles", + "bodyweight-squats": "Bodyweight Squats", + "knee-push-ups": "Knee Push-ups", + "marching-in-place": "Marching in Place", + "devil-press": "Devil Press", + "squat-jumps": "Squat Jumps", + "push-up-burpees": "Push-up Burpees", + "plank-jacks": "Plank Jacks", + "star-jumps": "Star Jumps", + "wall-sit": "Wall Sit", + "tricep-dips": "Tricep Dips", + "butt-kicks": "Butt Kicks", + "inchworms": "Inchworms", + "curtsy-lunges": "Curtsy Lunges", + "bear-crawls": "Bear Crawls", + "squat-pulses": "Squat Pulses", + "clean-and-press": "Clean & Press", + "lateral-bounds": "Lateral Bounds", + "slam-ball": "Slam Ball", + "sprawls": "Sprawls", + "jumping-lunges": "Jumping Lunges", + "push-up-to-t": "Push-up to T", + "speed-skaters": "Speed Skaters", + "plank-shoulder-taps": "Plank Shoulder Taps", + "side-lunges": "Side Lunges", + "diamond-push-ups": "Diamond Push-ups", + "glute-bridges": "Glute Bridges", + "toe-touches": "Toe Touches", + "crunches": "Crunches", + "russian-twists": "Russian Twists", + "leg-raises": "Leg Raises", + "plank-hold": "Plank Hold", + "v-ups": "V-Ups", + "bicycle-crunches": "Bicycle Crunches", + "dragon-flags": "Dragon Flags", + "flutter-kicks": "Flutter Kicks", + "dead-bug": "Dead Bug", + "bird-dog": "Bird Dog", + "side-plank-l": "Side Plank (L)", + "side-plank-r": "Side Plank (R)", + "woodchoppers": "Woodchoppers", + "side-crunches": "Side Crunches", + "windshield-wipers": "Windshield Wipers", + "plank-hip-dips": "Plank Hip Dips", + "hollow-body-hold": "Hollow Body Hold", + "turkish-get-ups": "Turkish Get-ups", + "ab-rollouts": "Ab Rollouts", + "pallof-press": "Pallof Press", + "pelvic-tilts": "Pelvic Tilts", + "modified-crunches": "Modified Crunches", + "supine-leg-march": "Supine Leg March", + "cat-cow": "Cat-Cow", + "plank-to-push-up": "Plank to Push-up", + "reverse-crunches": "Reverse Crunches", + "bear-hold": "Bear Hold", + "l-sits": "L-Sits", + "dragon-flag-negatives": "Dragon Flag Negatives", + "hanging-knee-raises": "Hanging Knee Raises", + "plank-walkouts": "Plank Walkouts", + "forearm-plank": "Forearm Plank", + "slow-bicycle": "Slow Bicycle", + "glute-bridge-march": "Glute Bridge March", + "prone-cobra": "Prone Cobra", + "stir-the-pot": "Stir the Pot", + "ab-wheel-rollout": "Ab Wheel Rollout", + "hanging-leg-raises": "Hanging Leg Raises", + "dumbbell-rows": "Dumbbell Rows", + "shoulder-press": "Shoulder Press", + "bicep-curls": "Bicep Curls", + "tricep-extensions": "Tricep Extensions", + "lateral-raises": "Lateral Raises", + "front-raises": "Front Raises", + "wide-push-ups": "Wide Push-ups", + "decline-push-ups": "Decline Push-ups", + "explosive-push-ups": "Explosive Push-ups", + "arnold-press": "Arnold Press", + "upright-rows": "Upright Rows", + "face-pulls": "Face Pulls", + "handstand-hold": "Handstand Hold", + "chest-press": "Chest Press", + "bent-over-rows": "Bent Over Rows", + "chest-flyes": "Chest Flyes", + "pull-ups": "Pull-ups", + "tricep-dips-chair": "Tricep Dips (Chair)", + "clean-and-jerk": "Clean & Jerk", + "turkish-get-up": "Turkish Get-up", + "overhead-press": "Overhead Press", + "hammer-curls": "Hammer Curls", + "overhead-tricep": "Overhead Tricep", + "reverse-flyes": "Reverse Flyes", + "concentration-curls": "Concentration Curls", + "skull-crushers": "Skull Crushers", + "zottman-curls": "Zottman Curls", + "dips": "Dips", + "barbell-press": "Barbell Press", + "dumbbell-snatch": "Dumbbell Snatch", + "plyo-push-ups": "Plyo Push-ups", + "calf-raises": "Calf Raises", + "jump-squats": "Jump Squats", + "walking-lunges": "Walking Lunges", + "step-ups": "Step-ups", + "donkey-kicks": "Donkey Kicks", + "fire-hydrants": "Fire Hydrants", + "clamshells": "Clamshells", + "pistol-squats": "Pistol Squats", + "broad-jumps": "Broad Jumps", + "goblet-squats": "Goblet Squats", + "sumo-squats": "Sumo Squats", + "pulse-squats": "Pulse Squats", + "front-squats": "Front Squats", + "romanian-deadlifts": "Romanian Deadlifts", + "split-squats": "Split Squats", + "power-cleans": "Power Cleans", + "standing-kickbacks": "Standing Kickbacks", + "side-leg-raises": "Side Leg Raises", + "high-knees-sprint": "High Knees Sprint", + "lateral-shuffles": "Lateral Shuffles", + "butt-kick-sprint": "Butt Kick Sprint", + "banded-squats": "Banded Squats", + "hip-thrusts": "Hip Thrusts", + "lateral-band-walks": "Lateral Band Walks", + "step-back-lunges": "Step-back Lunges", + "back-squats": "Back Squats", + "leg-press-jumps": "Leg Press Jumps", + "box-jump-overs": "Box Jump Overs", + "grapevine": "Grapevine", + "step-touch": "Step Touch", + "cha-cha-slide": "Cha-Cha Slide", + "jump-rope": "Jump Rope", + "step-touches": "Step Touches", + "boxing-punches": "Boxing Punches", + "side-steps": "Side Steps", + "burpee-tuck-jumps": "Burpee Tuck Jumps", + "sprint-in-place": "Sprint in Place", + "plyo-lunges": "Plyo Lunges", + "sun-salutation": "Sun Salutation", + "light-jog": "Light Jog", + "arm-swings": "Arm Swings", + "gentle-twists": "Gentle Twists", + "double-unders": "Double Unders", + "box-jump-burpees": "Box Jump Burpees", + "sprint-intervals": "Sprint Intervals", + "forward-fold": "Forward Fold", + "pigeon-pose": "Pigeon Pose", + "spinal-twist": "Spinal Twist", + "butterfly-stretch": "Butterfly Stretch" + }, + "equipment": { + "no-equipment-required": "No equipment required", + "yoga-mat-optional": "Yoga mat optional", + "yoga-mat": "Yoga mat", + "dumbbells-optional": "Dumbbells optional", + "dumbbells": "Dumbbells", + "kettlebell-recommended": "Kettlebell recommended", + "kettlebell": "Kettlebell", + "resistance-band-optional": "Resistance band optional", + "resistance-band": "Resistance band", + "medicine-ball": "Medicine ball", + "light-dumbbells": "Light dumbbells", + "pull-up-bar": "Pull-up bar", + "full-gym-setup": "Full gym setup", + "box-or-step": "Box or step", + "chair-for-balance": "Chair for balance", + "jump-rope-optional": "Jump rope optional", + "jump-rope": "Jump rope", + "stability-ball": "Stability ball", + "barbell": "Barbell", + "dumbbell-optional": "Dumbbell optional" + }, + "collections": { + "morning-energizer": { + "title": "Morning Energizer", + "description": "Start your day right" + }, + "no-equipment": { + "title": "No Equipment", + "description": "Workout anywhere" + }, + "7-day-burn": { + "title": "7-Day Burn Challenge", + "description": "Transform in one week" + }, + "quick-intense": { + "title": "Quick & Intense", + "description": "Max effort in 4 minutes" + }, + "core-focus": { + "title": "Core Focus", + "description": "Build a solid foundation" + }, + "leg-day": { + "title": "Leg Day", + "description": "Never skip leg day" + } + }, + "programs": { + "beginner-journey": { + "title": "Beginner Journey", + "description": "Your first steps into Tabata fitness" + }, + "strength-builder": { + "title": "Strength Builder", + "description": "Progressive strength development" + }, + "fat-burn-protocol": { + "title": "Fat Burn Protocol", + "description": "Maximum calorie burn program" + } + }, + "achievements": { + "first-burn": { + "title": "First Burn", + "description": "Complete your first workout" + }, + "week-warrior": { + "title": "Week Warrior", + "description": "7 day streak" + }, + "century-club": { + "title": "Century Club", + "description": "Burn 100 calories total" + }, + "iron-will": { + "title": "Iron Will", + "description": "Complete 10 workouts" + }, + "tabata-master": { + "title": "Tabata Master", + "description": "Complete 50 workouts" + }, + "marathon-burner": { + "title": "Marathon Burner", + "description": "Exercise for 100 minutes total" + }, + "unstoppable": { + "title": "Unstoppable", + "description": "30 day streak" + }, + "calorie-crusher": { + "title": "Calorie Crusher", + "description": "Burn 1000 calories total" + } + } +} diff --git a/src/shared/i18n/locales/en/notifications.json b/src/shared/i18n/locales/en/notifications.json new file mode 100644 index 0000000..2f18bf2 --- /dev/null +++ b/src/shared/i18n/locales/en/notifications.json @@ -0,0 +1,6 @@ +{ + "dailyReminder": { + "title": "Time for your Tabata!", + "body": "4 minutes to transform your day." + } +} diff --git a/src/shared/i18n/locales/en/screens.json b/src/shared/i18n/locales/en/screens.json index d64f8fb..0b0add1 100644 --- a/src/shared/i18n/locales/en/screens.json +++ b/src/shared/i18n/locales/en/screens.json @@ -53,6 +53,8 @@ "memberSince": "Member since {{date}}", "sectionWorkout": "WORKOUT", "sectionNotifications": "NOTIFICATIONS", + "sectionSubscription": "SUBSCRIPTION", + "restorePurchases": "Restore Purchases", "hapticFeedback": "Haptic Feedback", "soundEffects": "Sound Effects", "voiceCoaching": "Voice Coaching", @@ -189,6 +191,7 @@ "savePercent": "Save 42%", "trialCta": "START FREE TRIAL (7 days)", "guarantees": "Cancel anytime \u00B7 30-day money-back guarantee", + "restorePurchases": "Restore Purchases", "skipButton": "Continue without subscription" } } diff --git a/src/shared/i18n/locales/es/CLAUDE.md b/src/shared/i18n/locales/es/CLAUDE.md new file mode 100644 index 0000000..99f65a6 --- /dev/null +++ b/src/shared/i18n/locales/es/CLAUDE.md @@ -0,0 +1,14 @@ + +# Recent Activity + + + +### Feb 20, 2026 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 | +| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 | +| #5372 | 7:54 PM | 🟣 | Spanish Localization Added for Paywall Restore Purchases | ~138 | +| #5371 | " | 🟣 | Spanish Localization Added for Profile Subscription Section | ~163 | + \ No newline at end of file diff --git a/src/shared/i18n/locales/es/common.json b/src/shared/i18n/locales/es/common.json new file mode 100644 index 0000000..52b5acb --- /dev/null +++ b/src/shared/i18n/locales/es/common.json @@ -0,0 +1,76 @@ +{ + "start": "EMPEZAR", + "continue": "Continuar", + "next": "Siguiente", + "done": "Listo", + "seeAll": "Ver todo", + "back": "Atr\u00e1s", + "share": "Compartir", + "cancel": "Cancelar", + "save": "Guardar", + + "levels": { + "beginner": "Principiante", + "intermediate": "Intermedio", + "advanced": "Avanzado" + }, + + "categories": { + "all": "Todos", + "fullBody": "Cuerpo completo", + "core": "Core", + "upperBody": "Tren superior", + "lowerBody": "Tren inferior", + "cardio": "Cardio" + }, + + "days": { + "sun": "Dom", + "mon": "Lun", + "tue": "Mar", + "wed": "Mi\u00e9", + "thu": "Jue", + "fri": "Vie", + "sat": "S\u00e1b" + }, + + "greetings": { + "morning": "Buenos d\u00edas", + "afternoon": "Buenas tardes", + "evening": "Buenas noches" + }, + + "units": { + "min": "min", + "cal": "cal", + "minUnit": "{{count}} min", + "calUnit": "{{count}} cal", + "sWork": "{{count}}s trabajo", + "perYear": "por a\u00f1o", + "perMonth": "por mes", + "perWeek": "/semana" + }, + + "plurals": { + "workout_one": "{{count}} entrenamiento", + "workout_other": "{{count}} entrenamientos", + "day_one": "{{count}} d\u00eda", + "day_other": "{{count}} d\u00edas", + "round_one": "{{count}} ronda", + "round_other": "{{count}} rondas", + "week_one": "{{count}} semana", + "week_other": "{{count}} semanas" + }, + + "workoutMeta": "{{duration}} min \u00B7 {{level}} \u00B7 {{calories}} cal", + "durationLevel": "{{duration}} min \u00B7 {{level}}", + "calMin": "{{calories}} cal \u00B7 {{duration}} min", + + "musicVibes": { + "electronic": "Electr\u00f3nica", + "hipHop": "Hip-Hop", + "pop": "Pop", + "rock": "Rock", + "chill": "Chill" + } +} diff --git a/src/shared/i18n/locales/es/content.json b/src/shared/i18n/locales/es/content.json new file mode 100644 index 0000000..38d6963 --- /dev/null +++ b/src/shared/i18n/locales/es/content.json @@ -0,0 +1,310 @@ +{ + "workouts": { + "1": "Ignici\u00f3n total", + "2": "Explosi\u00f3n corporal", + "3": "Oleada de potencia", + "4": "Despertar matutino", + "5": "Constructor de resistencia", + "6": "Quema r\u00e1pida", + "7": "Flujo funcional", + "8": "Potencia atl\u00e9tica", + "9": "Sesi\u00f3n de sudor", + "10": "Tonificaci\u00f3n total", + "11": "Destructor de core", + "12": "Abdominales extremos", + "13": "Fundamentos de core", + "14": "Infierno oblicuo", + "15": "Resistencia de core", + "16": "Core suave", + "17": "Potencia de core", + "18": "Core 360", + "19": "Estabilidad de core", + "20": "Marat\u00f3n de core", + "21": "Ataque tren superior", + "22": "Escultor de brazos", + "23": "Dominio de flexiones", + "24": "Hombros al l\u00edmite", + "25": "Pecho y espalda", + "26": "Tren superior sin equipo", + "27": "Tabata de fuerza", + "28": "Tonifica y define", + "29": "Brazos de potencia", + "30": "Resistencia tren superior", + "31": "Quema de piernas", + "32": "D\u00eda de piernas Tabata", + "33": "Activador de gl\u00fateos", + "34": "Piernas explosivas", + "35": "Desaf\u00edo de sentadillas", + "36": "Potencia inferior", + "37": "Piernas sin impacto", + "38": "Tabata de sprint", + "39": "Piernas y gl\u00fateos", + "40": "Marat\u00f3n de piernas", + "41": "HIIT Extremo", + "42": "Explosi\u00f3n cardio", + "43": "Cardio bailable", + "44": "Quema grasa expr\u00e9s", + "45": "Cardio bajo impacto", + "46": "Infierno cardio", + "47": "Flujo al amanecer", + "48": "Hora de potencia", + "49": "Estiramiento profundo", + "50": "Marat\u00f3n cardio" + }, + "exercises": { + "jumping-jacks": "Jumping Jacks", + "squats": "Sentadillas", + "push-ups": "Flexiones", + "high-knees": "Rodillas arriba", + "burpees": "Burpees", + "lunges": "Zancadas", + "push-up-to-row": "Flexi\u00f3n con remo", + "mountain-climbers": "Escaladores", + "thrusters": "Thrusters", + "box-jumps": "Saltos al caj\u00f3n", + "renegade-rows": "Remo renegado", + "tuck-jumps": "Saltos con rodillas al pecho", + "arm-circles": "C\u00edrculos de brazos", + "bodyweight-squats": "Sentadillas con peso corporal", + "knee-push-ups": "Flexiones de rodillas", + "marching-in-place": "Marcha en el sitio", + "devil-press": "Devil Press", + "squat-jumps": "Sentadillas con salto", + "push-up-burpees": "Burpees con flexi\u00f3n", + "plank-jacks": "Plank Jacks", + "star-jumps": "Saltos de estrella", + "wall-sit": "Sentadilla en pared", + "tricep-dips": "Fondos de tr\u00edceps", + "butt-kicks": "Talones a gl\u00fateos", + "inchworms": "Inchworms", + "curtsy-lunges": "Zancadas cruzadas", + "bear-crawls": "Caminata de oso", + "squat-pulses": "Sentadillas con pulsos", + "clean-and-press": "Cargada y press", + "lateral-bounds": "Saltos laterales", + "slam-ball": "Slam Ball", + "sprawls": "Sprawls", + "jumping-lunges": "Zancadas con salto", + "push-up-to-t": "Flexi\u00f3n en T", + "speed-skaters": "Patinadores", + "plank-shoulder-taps": "Plancha con toque de hombros", + "side-lunges": "Zancadas laterales", + "diamond-push-ups": "Flexiones diamante", + "glute-bridges": "Puente de gl\u00fateos", + "toe-touches": "Toques de puntas", + "crunches": "Abdominales", + "russian-twists": "Giros rusos", + "leg-raises": "Elevaciones de piernas", + "plank-hold": "Plancha est\u00e1tica", + "v-ups": "V-Ups", + "bicycle-crunches": "Abdominales bicicleta", + "dragon-flags": "Dragon Flags", + "flutter-kicks": "Patadas de aleteo", + "dead-bug": "Dead Bug", + "bird-dog": "Bird Dog", + "side-plank-l": "Plancha lateral (I)", + "side-plank-r": "Plancha lateral (D)", + "woodchoppers": "Le\u00f1adores", + "side-crunches": "Abdominales laterales", + "windshield-wipers": "Limpiaparabrisas", + "plank-hip-dips": "Plancha con giro de cadera", + "hollow-body-hold": "Hollow Body Hold", + "turkish-get-ups": "Levantamiento turco", + "ab-rollouts": "Ab Rollouts", + "pallof-press": "Pallof Press", + "pelvic-tilts": "Inclinaci\u00f3n p\u00e9lvica", + "modified-crunches": "Abdominales modificados", + "supine-leg-march": "Marcha supina de piernas", + "cat-cow": "Gato-vaca", + "plank-to-push-up": "Plancha a flexi\u00f3n", + "reverse-crunches": "Abdominales inversos", + "bear-hold": "Posici\u00f3n de oso", + "l-sits": "L-Sits", + "dragon-flag-negatives": "Dragon Flag negativos", + "hanging-knee-raises": "Elevaci\u00f3n de rodillas colgado", + "plank-walkouts": "Plancha caminada", + "forearm-plank": "Plancha de antebrazos", + "slow-bicycle": "Bicicleta lenta", + "glute-bridge-march": "Puente de gl\u00fateos con marcha", + "prone-cobra": "Cobra boca abajo", + "stir-the-pot": "Stir the Pot", + "ab-wheel-rollout": "Rueda abdominal", + "hanging-leg-raises": "Elevaci\u00f3n de piernas colgado", + "dumbbell-rows": "Remo con mancuerna", + "shoulder-press": "Press de hombros", + "bicep-curls": "Curl de b\u00edceps", + "tricep-extensions": "Extensiones de tr\u00edceps", + "lateral-raises": "Elevaciones laterales", + "front-raises": "Elevaciones frontales", + "wide-push-ups": "Flexiones abiertas", + "decline-push-ups": "Flexiones declinadas", + "explosive-push-ups": "Flexiones explosivas", + "arnold-press": "Press Arnold", + "upright-rows": "Remo al ment\u00f3n", + "face-pulls": "Face Pulls", + "handstand-hold": "Pino est\u00e1tico", + "chest-press": "Press de pecho", + "bent-over-rows": "Remo inclinado", + "chest-flyes": "Aperturas de pecho", + "pull-ups": "Dominadas", + "tricep-dips-chair": "Fondos de tr\u00edceps (silla)", + "clean-and-jerk": "Cargada y env\u00f3n", + "turkish-get-up": "Levantamiento turco", + "overhead-press": "Press por encima de la cabeza", + "hammer-curls": "Curl martillo", + "overhead-tricep": "Tr\u00edceps por encima", + "reverse-flyes": "Aperturas inversas", + "concentration-curls": "Curl concentrado", + "skull-crushers": "Skull Crushers", + "zottman-curls": "Curl Zottman", + "dips": "Fondos", + "barbell-press": "Press con barra", + "dumbbell-snatch": "Arrancada con mancuerna", + "plyo-push-ups": "Flexiones pliom\u00e9tricas", + "calf-raises": "Elevaciones de gemelos", + "jump-squats": "Sentadillas con salto", + "walking-lunges": "Zancadas caminando", + "step-ups": "Step-ups", + "donkey-kicks": "Patadas de burro", + "fire-hydrants": "Hidrantes", + "clamshells": "Clamshells", + "pistol-squats": "Sentadilla a una pierna", + "broad-jumps": "Saltos de longitud", + "goblet-squats": "Sentadilla goblet", + "sumo-squats": "Sentadilla sumo", + "pulse-squats": "Sentadillas con pulsos", + "front-squats": "Sentadilla frontal", + "romanian-deadlifts": "Peso muerto rumano", + "split-squats": "Sentadillas b\u00falgaras", + "power-cleans": "Cargadas de potencia", + "standing-kickbacks": "Patadas traseras de pie", + "side-leg-raises": "Elevaci\u00f3n lateral de pierna", + "high-knees-sprint": "Sprint con rodillas arriba", + "lateral-shuffles": "Desplazamientos laterales", + "butt-kick-sprint": "Sprint con talones a gl\u00fateos", + "banded-squats": "Sentadillas con banda", + "hip-thrusts": "Empuje de cadera", + "lateral-band-walks": "Caminata lateral con banda", + "step-back-lunges": "Zancadas hacia atr\u00e1s", + "back-squats": "Sentadilla trasera", + "leg-press-jumps": "Saltos de prensa de pierna", + "box-jump-overs": "Saltos por encima del caj\u00f3n", + "grapevine": "Grapevine", + "step-touch": "Step Touch", + "cha-cha-slide": "Cha-Cha Slide", + "jump-rope": "Saltar la cuerda", + "step-touches": "Step Touches", + "boxing-punches": "Golpes de boxeo", + "side-steps": "Pasos laterales", + "burpee-tuck-jumps": "Burpees con salto agrupado", + "sprint-in-place": "Sprint en el sitio", + "plyo-lunges": "Zancadas pliom\u00e9tricas", + "sun-salutation": "Saludo al sol", + "light-jog": "Trote suave", + "arm-swings": "Balanceo de brazos", + "gentle-twists": "Giros suaves", + "double-unders": "Dobles de cuerda", + "box-jump-burpees": "Burpees con salto al caj\u00f3n", + "sprint-intervals": "Intervalos de sprint", + "forward-fold": "Pliegue hacia adelante", + "pigeon-pose": "Postura de paloma", + "spinal-twist": "Torsi\u00f3n espinal", + "butterfly-stretch": "Estiramiento mariposa" + }, + "equipment": { + "no-equipment-required": "Sin equipamiento necesario", + "yoga-mat-optional": "Esterilla de yoga opcional", + "yoga-mat": "Esterilla de yoga", + "dumbbells-optional": "Mancuernas opcionales", + "dumbbells": "Mancuernas", + "kettlebell-recommended": "Kettlebell recomendada", + "kettlebell": "Kettlebell", + "resistance-band-optional": "Banda el\u00e1stica opcional", + "resistance-band": "Banda el\u00e1stica", + "medicine-ball": "Bal\u00f3n medicinal", + "light-dumbbells": "Mancuernas ligeras", + "pull-up-bar": "Barra de dominadas", + "full-gym-setup": "Equipamiento completo de gimnasio", + "box-or-step": "Caj\u00f3n o step", + "chair-for-balance": "Silla para equilibrio", + "jump-rope-optional": "Cuerda de saltar opcional", + "jump-rope": "Cuerda de saltar", + "stability-ball": "Bal\u00f3n de estabilidad", + "barbell": "Barra", + "dumbbell-optional": "Mancuerna opcional" + }, + "collections": { + "morning-energizer": { + "title": "Energ\u00eda matutina", + "description": "Empieza bien el d\u00eda" + }, + "no-equipment": { + "title": "Sin equipamiento", + "description": "Entrena donde quieras" + }, + "7-day-burn": { + "title": "Desaf\u00edo 7 d\u00edas de quema", + "description": "Transf\u00f3rmate en una semana" + }, + "quick-intense": { + "title": "R\u00e1pido e intenso", + "description": "M\u00e1ximo esfuerzo en 4 minutos" + }, + "core-focus": { + "title": "Enfoque en core", + "description": "Construye una base s\u00f3lida" + }, + "leg-day": { + "title": "D\u00eda de piernas", + "description": "Nunca te saltes el d\u00eda de piernas" + } + }, + "programs": { + "beginner-journey": { + "title": "Camino del principiante", + "description": "Tus primeros pasos en el fitness Tabata" + }, + "strength-builder": { + "title": "Constructor de fuerza", + "description": "Desarrollo progresivo de fuerza" + }, + "fat-burn-protocol": { + "title": "Protocolo quema grasa", + "description": "Programa de m\u00e1xima quema de calor\u00edas" + } + }, + "achievements": { + "first-burn": { + "title": "Primera quema", + "description": "Completa tu primer entreno" + }, + "week-warrior": { + "title": "Guerrero semanal", + "description": "Racha de 7 d\u00edas" + }, + "century-club": { + "title": "Club del centenario", + "description": "Quema 100 calor\u00edas en total" + }, + "iron-will": { + "title": "Voluntad de hierro", + "description": "Completa 10 entrenos" + }, + "tabata-master": { + "title": "Maestro Tabata", + "description": "Completa 50 entrenos" + }, + "marathon-burner": { + "title": "Quemador marat\u00f3n", + "description": "Ejerc\u00edtate 100 minutos en total" + }, + "unstoppable": { + "title": "Imparable", + "description": "Racha de 30 d\u00edas" + }, + "calorie-crusher": { + "title": "Destructor de calor\u00edas", + "description": "Quema 1000 calor\u00edas en total" + } + } +} diff --git a/src/shared/i18n/locales/es/notifications.json b/src/shared/i18n/locales/es/notifications.json new file mode 100644 index 0000000..5192895 --- /dev/null +++ b/src/shared/i18n/locales/es/notifications.json @@ -0,0 +1,6 @@ +{ + "dailyReminder": { + "title": "\u00a1Es hora de tu Tabata!", + "body": "4 minutos para transformar tu d\u00eda." + } +} diff --git a/src/shared/i18n/locales/es/screens.json b/src/shared/i18n/locales/es/screens.json index 9052753..276187f 100644 --- a/src/shared/i18n/locales/es/screens.json +++ b/src/shared/i18n/locales/es/screens.json @@ -53,6 +53,8 @@ "memberSince": "Miembro desde {{date}}", "sectionWorkout": "ENTRENAMIENTO", "sectionNotifications": "NOTIFICACIONES", + "sectionSubscription": "SUSCRIPCI\u00d3N", + "restorePurchases": "Restaurar compras", "hapticFeedback": "Retroalimentaci\u00f3n h\u00e1ptica", "soundEffects": "Efectos de sonido", "voiceCoaching": "Coaching por voz", @@ -189,6 +191,7 @@ "savePercent": "Ahorra 42%", "trialCta": "EMPEZAR PRUEBA GRATIS (7 d\u00edas)", "guarantees": "Cancela cuando quieras \u00B7 Garant\u00eda de devoluci\u00f3n de 30 d\u00edas", + "restorePurchases": "Restaurar compras", "skipButton": "Continuar sin suscripci\u00f3n" } } diff --git a/src/shared/i18n/locales/fr/CLAUDE.md b/src/shared/i18n/locales/fr/CLAUDE.md new file mode 100644 index 0000000..adfdcb1 --- /dev/null +++ b/src/shared/i18n/locales/fr/CLAUDE.md @@ -0,0 +1,7 @@ + +# Recent Activity + + + +*No recent activity* + \ No newline at end of file diff --git a/src/shared/i18n/locales/fr/common.json b/src/shared/i18n/locales/fr/common.json new file mode 100644 index 0000000..879a186 --- /dev/null +++ b/src/shared/i18n/locales/fr/common.json @@ -0,0 +1,76 @@ +{ + "start": "COMMENCER", + "continue": "Continuer", + "next": "Suivant", + "done": "Termin\u00e9", + "seeAll": "Tout voir", + "back": "Retour", + "share": "Partager", + "cancel": "Annuler", + "save": "Enregistrer", + + "levels": { + "beginner": "D\u00e9butant", + "intermediate": "Interm\u00e9diaire", + "advanced": "Avanc\u00e9" + }, + + "categories": { + "all": "Tout", + "fullBody": "Full Body", + "core": "Abdos", + "upperBody": "Haut du corps", + "lowerBody": "Bas du corps", + "cardio": "Cardio" + }, + + "days": { + "sun": "Dim", + "mon": "Lun", + "tue": "Mar", + "wed": "Mer", + "thu": "Jeu", + "fri": "Ven", + "sat": "Sam" + }, + + "greetings": { + "morning": "Bonjour", + "afternoon": "Bon apr\u00e8s-midi", + "evening": "Bonsoir" + }, + + "units": { + "min": "min", + "cal": "cal", + "minUnit": "{{count}} min", + "calUnit": "{{count}} cal", + "sWork": "{{count}}s effort", + "perYear": "par an", + "perMonth": "par mois", + "perWeek": "/semaine" + }, + + "plurals": { + "workout_one": "{{count}} entra\u00eenement", + "workout_other": "{{count}} entra\u00eenements", + "day_one": "{{count}} jour", + "day_other": "{{count}} jours", + "round_one": "{{count}} round", + "round_other": "{{count}} rounds", + "week_one": "{{count}} semaine", + "week_other": "{{count}} semaines" + }, + + "workoutMeta": "{{duration}} min \u00B7 {{level}} \u00B7 {{calories}} cal", + "durationLevel": "{{duration}} min \u00B7 {{level}}", + "calMin": "{{calories}} cal \u00B7 {{duration}} min", + + "musicVibes": { + "electronic": "\u00c9lectronique", + "hipHop": "Hip-Hop", + "pop": "Pop", + "rock": "Rock", + "chill": "Chill" + } +} diff --git a/src/shared/i18n/locales/fr/content.json b/src/shared/i18n/locales/fr/content.json new file mode 100644 index 0000000..ad8786c --- /dev/null +++ b/src/shared/i18n/locales/fr/content.json @@ -0,0 +1,310 @@ +{ + "workouts": { + "1": "Full Body Ignite", + "2": "Total Body Blast", + "3": "Power Surge", + "4": "R\u00e9veil Matinal", + "5": "Endurance Builder", + "6": "Br\u00fblure Express", + "7": "Functional Flow", + "8": "Puissance Athl\u00e9tique", + "9": "Session Sueur", + "10": "Tonus Total", + "11": "Core Crusher", + "12": "Ab Shredder", + "13": "Abdos Fondamentaux", + "14": "Obliqu\u00e9s Inferno", + "15": "Endurance Abdos", + "16": "Abdos Doux", + "17": "Core Power", + "18": "Abdos 360", + "19": "Stabilit\u00e9 Abdos", + "20": "Abdos Marathon", + "21": "Haut du Corps Blitz", + "22": "Sculpteur de Bras", + "23": "Ma\u00eetrise des Pompes", + "24": "\u00c9paules Sculpt\u00e9es", + "25": "Pectoraux & Dos", + "26": "Haut du Corps Poids de Corps", + "27": "Tabata Force", + "28": "Tonifier & D\u00e9finir", + "29": "Bras Puissants", + "30": "Endurance Haut du Corps", + "31": "Br\u00fblure Bas du Corps", + "32": "Leg Day Tabata", + "33": "Activation Fessiers", + "34": "Jambes Explosives", + "35": "D\u00e9fi Squats", + "36": "Puissance Bas du Corps", + "37": "Jambes Sans Impact", + "38": "Sprint Tabata", + "39": "Jambes & Fessiers", + "40": "Marathon Jambes", + "41": "HIIT Extr\u00eame", + "42": "Cardio Blast", + "43": "Cardio Danse", + "44": "Br\u00fbleur de Graisses Express", + "45": "Cardio Faible Impact", + "46": "Cardio Inferno", + "47": "Flow Matinal", + "48": "Power Hour", + "49": "\u00c9tirements Profonds", + "50": "Cardio Marathon" + }, + "exercises": { + "jumping-jacks": "Jumping Jacks", + "squats": "Squats", + "push-ups": "Pompes", + "high-knees": "Mont\u00e9es de genoux", + "burpees": "Burpees", + "lunges": "Fentes", + "push-up-to-row": "Pompe-Tirage", + "mountain-climbers": "Mountain Climbers", + "thrusters": "Thrusters", + "box-jumps": "Box Jumps", + "renegade-rows": "Renegade Rows", + "tuck-jumps": "Sauts group\u00e9s", + "arm-circles": "Cercles de bras", + "bodyweight-squats": "Squats poids de corps", + "knee-push-ups": "Pompes sur les genoux", + "marching-in-place": "Marche sur place", + "devil-press": "Devil Press", + "squat-jumps": "Squats saut\u00e9s", + "push-up-burpees": "Pompes Burpees", + "plank-jacks": "Plank Jacks", + "star-jumps": "Sauts en \u00e9toile", + "wall-sit": "Chaise", + "tricep-dips": "Dips triceps", + "butt-kicks": "Talons-fesses", + "inchworms": "Inchworms", + "curtsy-lunges": "Fentes crois\u00e9es", + "bear-crawls": "Marche de l'ours", + "squat-pulses": "Squats pulses", + "clean-and-press": "Clean & Press", + "lateral-bounds": "Bonds lat\u00e9raux", + "slam-ball": "Slam Ball", + "sprawls": "Sprawls", + "jumping-lunges": "Fentes saut\u00e9es", + "push-up-to-t": "Pompe en T", + "speed-skaters": "Speed Skaters", + "plank-shoulder-taps": "Planche touches d'\u00e9paules", + "side-lunges": "Fentes lat\u00e9rales", + "diamond-push-ups": "Pompes diamant", + "glute-bridges": "Ponts fessiers", + "toe-touches": "Touch\u00e9s d'orteils", + "crunches": "Crunchs", + "russian-twists": "Rotations russes", + "leg-raises": "\u00c9l\u00e9vations de jambes", + "plank-hold": "Gainage", + "v-ups": "V-Ups", + "bicycle-crunches": "Crunchs bicyclette", + "dragon-flags": "Dragon Flags", + "flutter-kicks": "Battements de jambes", + "dead-bug": "Dead Bug", + "bird-dog": "Bird Dog", + "side-plank-l": "Planche lat\u00e9rale (G)", + "side-plank-r": "Planche lat\u00e9rale (D)", + "woodchoppers": "B\u00fbcherons", + "side-crunches": "Crunchs lat\u00e9raux", + "windshield-wipers": "Essuie-glaces", + "plank-hip-dips": "Planche rotations hanches", + "hollow-body-hold": "Hollow Body Hold", + "turkish-get-ups": "Relev\u00e9s turcs", + "ab-rollouts": "Ab Rollouts", + "pallof-press": "Pallof Press", + "pelvic-tilts": "Bascules du bassin", + "modified-crunches": "Crunchs modifi\u00e9s", + "supine-leg-march": "Marche de jambes allong\u00e9", + "cat-cow": "Chat-Vache", + "plank-to-push-up": "Planche vers pompe", + "reverse-crunches": "Crunchs invers\u00e9s", + "bear-hold": "Position de l'ours", + "l-sits": "L-Sits", + "dragon-flag-negatives": "Dragon Flag n\u00e9gatifs", + "hanging-knee-raises": "Mont\u00e9es de genoux suspendues", + "plank-walkouts": "Planche marche", + "forearm-plank": "Gainage avant-bras", + "slow-bicycle": "Bicyclette lente", + "glute-bridge-march": "Pont fessier march\u00e9", + "prone-cobra": "Cobra ventral", + "stir-the-pot": "Stir the Pot", + "ab-wheel-rollout": "Roue abdominale", + "hanging-leg-raises": "\u00c9l\u00e9vations de jambes suspendues", + "dumbbell-rows": "Tirages halt\u00e8res", + "shoulder-press": "D\u00e9velopp\u00e9 \u00e9paules", + "bicep-curls": "Curls biceps", + "tricep-extensions": "Extensions triceps", + "lateral-raises": "\u00c9l\u00e9vations lat\u00e9rales", + "front-raises": "\u00c9l\u00e9vations frontales", + "wide-push-ups": "Pompes larges", + "decline-push-ups": "Pompes d\u00e9clin\u00e9es", + "explosive-push-ups": "Pompes explosives", + "arnold-press": "Arnold Press", + "upright-rows": "Tirages verticaux", + "face-pulls": "Face Pulls", + "handstand-hold": "Appui tendu renvers\u00e9", + "chest-press": "D\u00e9velopp\u00e9 couch\u00e9", + "bent-over-rows": "Tirages pench\u00e9s", + "chest-flyes": "\u00c9cart\u00e9s pectoraux", + "pull-ups": "Tractions", + "tricep-dips-chair": "Dips triceps (chaise)", + "clean-and-jerk": "Clean & Jerk", + "turkish-get-up": "Relev\u00e9 turc", + "overhead-press": "D\u00e9velopp\u00e9 militaire", + "hammer-curls": "Curls marteau", + "overhead-tricep": "Triceps au-dessus de la t\u00eate", + "reverse-flyes": "\u00c9cart\u00e9s invers\u00e9s", + "concentration-curls": "Curls concentration", + "skull-crushers": "Skull Crushers", + "zottman-curls": "Curls Zottman", + "dips": "Dips", + "barbell-press": "D\u00e9velopp\u00e9 barre", + "dumbbell-snatch": "Arrach\u00e9 halt\u00e8re", + "plyo-push-ups": "Pompes pliom\u00e9triques", + "calf-raises": "Mollets debout", + "jump-squats": "Squats saut\u00e9s", + "walking-lunges": "Fentes march\u00e9es", + "step-ups": "Step-ups", + "donkey-kicks": "Donkey Kicks", + "fire-hydrants": "Fire Hydrants", + "clamshells": "Clamshells", + "pistol-squats": "Pistol Squats", + "broad-jumps": "Sauts en longueur", + "goblet-squats": "Goblet Squats", + "sumo-squats": "Squats sumo", + "pulse-squats": "Squats pulses", + "front-squats": "Squats avant", + "romanian-deadlifts": "Soulevé de terre roumain", + "split-squats": "Squats bulgares", + "power-cleans": "Power Cleans", + "standing-kickbacks": "Kickbacks debout", + "side-leg-raises": "\u00c9l\u00e9vations lat\u00e9rales de jambes", + "high-knees-sprint": "Sprint mont\u00e9es de genoux", + "lateral-shuffles": "Pas chass\u00e9s", + "butt-kick-sprint": "Sprint talons-fesses", + "banded-squats": "Squats avec \u00e9lastique", + "hip-thrusts": "Hip Thrusts", + "lateral-band-walks": "Marche lat\u00e9rale \u00e9lastique", + "step-back-lunges": "Fentes arri\u00e8re", + "back-squats": "Squats arri\u00e8re", + "leg-press-jumps": "Sauts presse \u00e0 jambes", + "box-jump-overs": "Box Jump Overs", + "grapevine": "Pas crois\u00e9s", + "step-touch": "Step Touch", + "cha-cha-slide": "Cha-Cha Slide", + "jump-rope": "Corde \u00e0 sauter", + "step-touches": "Step Touches", + "boxing-punches": "Coups de poing boxe", + "side-steps": "Pas lat\u00e9raux", + "burpee-tuck-jumps": "Burpees sauts group\u00e9s", + "sprint-in-place": "Sprint sur place", + "plyo-lunges": "Fentes pliom\u00e9triques", + "sun-salutation": "Salutation au soleil", + "light-jog": "Jogging l\u00e9ger", + "arm-swings": "Balancements de bras", + "gentle-twists": "Rotations douces", + "double-unders": "Double Unders", + "box-jump-burpees": "Box Jump Burpees", + "sprint-intervals": "Intervalles de sprint", + "forward-fold": "Flexion avant", + "pigeon-pose": "Posture du pigeon", + "spinal-twist": "Torsion vertébrale", + "butterfly-stretch": "\u00c9tirement papillon" + }, + "equipment": { + "no-equipment-required": "Aucun \u00e9quipement requis", + "yoga-mat-optional": "Tapis de yoga optionnel", + "yoga-mat": "Tapis de yoga", + "dumbbells-optional": "Halt\u00e8res optionnels", + "dumbbells": "Halt\u00e8res", + "kettlebell-recommended": "Kettlebell recommand\u00e9", + "kettlebell": "Kettlebell", + "resistance-band-optional": "\u00c9lastique optionnel", + "resistance-band": "\u00c9lastique de r\u00e9sistance", + "medicine-ball": "M\u00e9decine-ball", + "light-dumbbells": "Halt\u00e8res l\u00e9gers", + "pull-up-bar": "Barre de traction", + "full-gym-setup": "\u00c9quipement complet de salle", + "box-or-step": "Box ou step", + "chair-for-balance": "Chaise pour l'\u00e9quilibre", + "jump-rope-optional": "Corde \u00e0 sauter optionnelle", + "jump-rope": "Corde \u00e0 sauter", + "stability-ball": "Ballon de stabilit\u00e9", + "barbell": "Barre d'halt\u00e8res", + "dumbbell-optional": "Halt\u00e8re optionnel" + }, + "collections": { + "morning-energizer": { + "title": "\u00c9nergie Matinale", + "description": "Bien d\u00e9marrer la journ\u00e9e" + }, + "no-equipment": { + "title": "Sans \u00c9quipement", + "description": "Entra\u00eenez-vous partout" + }, + "7-day-burn": { + "title": "D\u00e9fi Br\u00fblure 7 Jours", + "description": "Transformez-vous en une semaine" + }, + "quick-intense": { + "title": "Rapide & Intense", + "description": "Effort max en 4 minutes" + }, + "core-focus": { + "title": "Focus Abdos", + "description": "Construisez une base solide" + }, + "leg-day": { + "title": "Jour des Jambes", + "description": "Ne sautez jamais le jour des jambes" + } + }, + "programs": { + "beginner-journey": { + "title": "Parcours D\u00e9butant", + "description": "Vos premiers pas dans le fitness Tabata" + }, + "strength-builder": { + "title": "Construction de Force", + "description": "D\u00e9veloppement progressif de la force" + }, + "fat-burn-protocol": { + "title": "Protocole Br\u00fble-Graisses", + "description": "Programme de br\u00fblure maximale de calories" + } + }, + "achievements": { + "first-burn": { + "title": "Premi\u00e8re Flamme", + "description": "Terminez votre premier entra\u00eenement" + }, + "week-warrior": { + "title": "Guerrier de la Semaine", + "description": "S\u00e9rie de 7 jours" + }, + "century-club": { + "title": "Club des 100", + "description": "Br\u00fblez 100 calories au total" + }, + "iron-will": { + "title": "Volont\u00e9 de Fer", + "description": "Terminez 10 entra\u00eenements" + }, + "tabata-master": { + "title": "Ma\u00eetre Tabata", + "description": "Terminez 50 entra\u00eenements" + }, + "marathon-burner": { + "title": "Marathonien du Br\u00fblage", + "description": "Exercez-vous pendant 100 minutes au total" + }, + "unstoppable": { + "title": "Inarr\u00eatable", + "description": "S\u00e9rie de 30 jours" + }, + "calorie-crusher": { + "title": "Broyeur de Calories", + "description": "Br\u00fblez 1000 calories au total" + } + } +} diff --git a/src/shared/i18n/locales/fr/notifications.json b/src/shared/i18n/locales/fr/notifications.json new file mode 100644 index 0000000..e66ac10 --- /dev/null +++ b/src/shared/i18n/locales/fr/notifications.json @@ -0,0 +1,6 @@ +{ + "dailyReminder": { + "title": "C'est l'heure de votre Tabata !", + "body": "4 minutes pour transformer votre journ\u00e9e." + } +} diff --git a/src/shared/i18n/locales/fr/screens.json b/src/shared/i18n/locales/fr/screens.json index 99c6196..201a305 100644 --- a/src/shared/i18n/locales/fr/screens.json +++ b/src/shared/i18n/locales/fr/screens.json @@ -53,6 +53,8 @@ "memberSince": "Membre depuis {{date}}", "sectionWorkout": "ENTRA\u00ceNEMENT", "sectionNotifications": "NOTIFICATIONS", + "sectionSubscription": "ABONNEMENT", + "restorePurchases": "Restaurer les achats", "hapticFeedback": "Retour haptique", "soundEffects": "Effets sonores", "voiceCoaching": "Coaching vocal", @@ -189,6 +191,7 @@ "savePercent": "\u00c9conomisez 42%", "trialCta": "ESSAI GRATUIT (7 jours)", "guarantees": "Annulation \u00e0 tout moment \u00B7 Garantie satisfait ou rembours\u00e9 30 jours", + "restorePurchases": "Restaurer les achats", "skipButton": "Continuer sans abonnement" } } diff --git a/src/shared/i18n/types.ts b/src/shared/i18n/types.ts new file mode 100644 index 0000000..e11fe94 --- /dev/null +++ b/src/shared/i18n/types.ts @@ -0,0 +1,23 @@ +/** + * TabataFit i18n Type Augmentation + * Provides typed t() keys via module augmentation + */ + +import 'react-i18next' + +import type enCommon from './locales/en/common.json' +import type enScreens from './locales/en/screens.json' +import type enContent from './locales/en/content.json' +import type enNotifications from './locales/en/notifications.json' + +declare module 'react-i18next' { + interface CustomTypeOptions { + defaultNS: 'common' + resources: { + common: typeof enCommon + screens: typeof enScreens + content: typeof enContent + notifications: typeof enNotifications + } + } +}