feat: i18n infrastructure with 4-locale support (en, fr, es, de)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
123
src/shared/data/useTranslatedData.ts
Normal file
123
src/shared/data/useTranslatedData.ts
Normal file
@@ -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<T extends { id: string; title: string }>(
|
||||
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<string, string> = {
|
||||
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<string, string> = {
|
||||
electronic: 'musicVibes.electronic',
|
||||
'hip-hop': 'musicVibes.hipHop',
|
||||
pop: 'musicVibes.pop',
|
||||
rock: 'musicVibes.rock',
|
||||
chill: 'musicVibes.chill',
|
||||
}
|
||||
return t(vibeKeyMap[vibe] ?? vibe, { defaultValue: vibe })
|
||||
}
|
||||
76
src/shared/i18n/index.ts
Normal file
76
src/shared/i18n/index.ts
Normal file
@@ -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
|
||||
14
src/shared/i18n/locales/de/CLAUDE.md
Normal file
14
src/shared/i18n/locales/de/CLAUDE.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<claude-mem-context>
|
||||
# Recent Activity
|
||||
|
||||
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
||||
|
||||
### 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 |
|
||||
</claude-mem-context>
|
||||
76
src/shared/i18n/locales/de/common.json
Normal file
76
src/shared/i18n/locales/de/common.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
310
src/shared/i18n/locales/de/content.json
Normal file
310
src/shared/i18n/locales/de/content.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/shared/i18n/locales/de/notifications.json
Normal file
6
src/shared/i18n/locales/de/notifications.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dailyReminder": {
|
||||
"title": "Zeit für dein Tabata!",
|
||||
"body": "4 Minuten, die deinen Tag verändern."
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
14
src/shared/i18n/locales/en/CLAUDE.md
Normal file
14
src/shared/i18n/locales/en/CLAUDE.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<claude-mem-context>
|
||||
# Recent Activity
|
||||
|
||||
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
||||
|
||||
### 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 |
|
||||
</claude-mem-context>
|
||||
76
src/shared/i18n/locales/en/common.json
Normal file
76
src/shared/i18n/locales/en/common.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
310
src/shared/i18n/locales/en/content.json
Normal file
310
src/shared/i18n/locales/en/content.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/shared/i18n/locales/en/notifications.json
Normal file
6
src/shared/i18n/locales/en/notifications.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dailyReminder": {
|
||||
"title": "Time for your Tabata!",
|
||||
"body": "4 minutes to transform your day."
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
14
src/shared/i18n/locales/es/CLAUDE.md
Normal file
14
src/shared/i18n/locales/es/CLAUDE.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<claude-mem-context>
|
||||
# Recent Activity
|
||||
|
||||
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
||||
|
||||
### 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 |
|
||||
</claude-mem-context>
|
||||
76
src/shared/i18n/locales/es/common.json
Normal file
76
src/shared/i18n/locales/es/common.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
310
src/shared/i18n/locales/es/content.json
Normal file
310
src/shared/i18n/locales/es/content.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/shared/i18n/locales/es/notifications.json
Normal file
6
src/shared/i18n/locales/es/notifications.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dailyReminder": {
|
||||
"title": "\u00a1Es hora de tu Tabata!",
|
||||
"body": "4 minutos para transformar tu d\u00eda."
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
7
src/shared/i18n/locales/fr/CLAUDE.md
Normal file
7
src/shared/i18n/locales/fr/CLAUDE.md
Normal file
@@ -0,0 +1,7 @@
|
||||
<claude-mem-context>
|
||||
# Recent Activity
|
||||
|
||||
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
||||
|
||||
*No recent activity*
|
||||
</claude-mem-context>
|
||||
76
src/shared/i18n/locales/fr/common.json
Normal file
76
src/shared/i18n/locales/fr/common.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
310
src/shared/i18n/locales/fr/content.json
Normal file
310
src/shared/i18n/locales/fr/content.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/shared/i18n/locales/fr/notifications.json
Normal file
6
src/shared/i18n/locales/fr/notifications.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dailyReminder": {
|
||||
"title": "C'est l'heure de votre Tabata !",
|
||||
"body": "4 minutes pour transformer votre journ\u00e9e."
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
23
src/shared/i18n/types.ts
Normal file
23
src/shared/i18n/types.ts
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user